第一题

下列程序输出啥?

public class StringDemo{
private static final String MESSAGE="taobao";
public static void main(String [] args) {
String a ="tao"+"bao";
String b="tao";
String c="bao";
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}

解析:

做这道题之前,需要明白三个知识点:

  1. ==符号比较引用类型时,比较的是双方的地址。
  2. String s = "xxx"或者,String s = "xxx" + "yyy",这种创建String类型变量的情况,都是把变量存到常量池中。
  3. new 类名()会在堆中创建一个对象,堆中地址当然和常量池的地址不一样。两个一模一样的玩具,一个在客厅,一个在卧室。

我在做这道题的时候,在想这样一个问题:静态常量的字符串也是存在常量池中的吗?通过在idea中debug,验证了我的猜想:静态常量的字符串也是存在常量池中的。

于是,a==MESSAGE就是对的。

那么,b+c==MESSAGE呢?通过追踪源码可知,因为b+c变量相加,所以在底层会创建一个StringBuilder类型的变量来存储b+c的结果,存好之后,又转换为String类型,这个String类型是由StringBuilder转化过来的,但是地址还是在堆中,所以它的地址也就和MESSAGE不同,那么结果也就是false。

答案:

true false

第二题

下列程序输出啥

class Test {
public static void main(String[] args) {
System.out.println(new B().getValue());
} static class A {
protected int value; public A(int v) {
setValue(v);
} public void setValue(int value) {
this.value = value;
} public int getValue() {
try {
value++;
return value;
} finally {
this.setValue(value);
System.out.println(value);
}
}
} static class B extends A {
public B() {
super(5);
setValue(getValue() - 3);
} public void setValue(int value) {
super.setValue(2 * value);
}
}
}

解析:

这题考察try-catch和多态的动态绑定机制,还涉及了一点静态内部类。

必备知识:

  • 学会idea的debug功能
  • try-catch中如果有return语句
    • finally没有返回值,先把return的值保存起来。执行完finally后,执行return,返回的是保存起来的值,而不是finally中改变的值!
    • finally有返回值,会覆盖掉try-catch中的return语句。
  • 执行一个对象的方法时,是看这个对象的运行类型,啥是运行类型?就是new一个对象时,new后面那个类型。如果这个运行类型的类中没有调用的方法,就一层一层地去父类中找。如果用super.方法名(),那么直接去父类中找方法。再提一嘴,方法名()等价于this.方法名()this是啥?就是程序当前执行的方法的调用者

回到题目,这道题用语言来描述会有点麻烦,大家可以了解一下我前面所说的必备知识,然后自己思考一下执行流程,一定要在idea中debug一下,只需要在main方法中打一个断点即可,看看整个程序的执行流程,以后再遇到类似的题目,基本没啥问题。

答案:

22 34 17

牛客网刷Java记录第一天的更多相关文章

  1. 牛客网刷题(纯java题型 31~60题)

    牛客网刷题(纯java题型 31~60题) 重写Override应该满足"三同一大一小"三同:方法名相同,参数列表相同,返回值相同或者子类的返回值是父类的子类(这一点是经过验证的) ...

  2. 牛客网刷题(纯java题型 1~30题)

    牛客网刷题(纯java题型 1~30题) 应该是先extend,然后implement class test extends A implements B { public static void m ...

  3. 牛客网:Java重命名文件

    项目介绍 不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,此项目主要训练学习Java对本地磁盘的文件重命名,例如C:\nowcoder.txt重命名C:\n ...

  4. 牛客网:java入门实现遍历目录

    项目介绍 遍历目录是操作文件时的一个常见需求.比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录.该项目教会你如何使用流式编程和lambda表达式,帮助你进一步熟悉java8 ...

  5. 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...

  6. 牛客网多校训练第一场 E - Removal(线性DP + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/E 题意: 给出一个n(1≤n≤1e5)个整数(范围是1至10)的序列,求从中移除m(1≤m≤min(n-1, ...

  7. 牛客网多校训练第一场 D - Two Graphs

    链接: https://www.nowcoder.com/acm/contest/139/D 题意: 两个无向简单图都有n(1≤n≤8)个顶点,图G1有m1条边,图G2有m2条边,问G2有多少个子图与 ...

  8. 牛客网多校训练第一场 B - Symmetric Matrix(dp)

    链接: https://www.nowcoder.com/acm/contest/139/B 题意: 求满足以下条件的n*n矩阵A的数量模m:A(i,j) ∈ {0,1,2}, 1≤i,j≤n.A(i ...

  9. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)

    链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...

  10. 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)

    链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...

随机推荐

  1. HTML一键打包APK工具1.9.5更新,新增一机一码功能

    HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. 打包软件会 ...

  2. 为什么大家都在用 WebP?

    WebP 是谷歌在 2010 年提出的一种新型的图片格式,放到现在来讲,已经不算是"新"技术了,毕竟已经有了更新的 JPEG XL 和 AVIF .但是在日常工作中,大家时常会碰到 ...

  3. ubuntu22.04.3 安装postgresql 16 rc1数据库

    ubuntu22.04.3 安装postgresql 16 rc1数据库 一.直接安装 # Create the file repository configuration: sudo sh -c ' ...

  4. JavaScript中的浅拷贝与深拷贝

    前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用.在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果. 浅拷贝是创 ...

  5. JAVA中三种I/O框架——BIO、NIO、AIO

    一.BIO(Blocking I/O) BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间: 在一般的场景中,多线程模型下的BIO是成本较低 ...

  6. [HNCTF 2022 WEEK2]e@sy_flower

    花指令分析 如果没接触过花指令,先看这个博客,大致了解一下花指令 https://www.cnblogs.com/Here-is-SG/p/15802040.html 点击此处下载附件 查壳 32位, ...

  7. Oracle:Ora-01652无法通过128(在temp表空间中)扩展temp段的过程-解决步骤

    现象:查询select * from v$sql时提示"Ora-01652无法通过128(在temp表空间中)扩展temp段的过程" 临时文件是不存储的,可以将数据库重启,重启后重 ...

  8. std::copy与std::back_inserter引发的惨案

    #include <iostream> #include <vector> #include <numeric> #include <sstream> ...

  9. dms

          产品解决方案文档与社区免费试用定价云市场合作伙伴支持与服务了解阿里云       备案控制台 首页关系型数据库NoSQL数据库数据仓库数据管理工具向量数据库免费试用 个人     打卡 发 ...

  10. ptaCCF

    返回首页 English站点地图联系我们常见问题CCF招聘登录 加入CCF 计算机 CCF简介   中国计算机学会(CCF)成立于1962年,全国性学会,独立社团法人,中国科学技术协会成员. CCF是 ...