牛客网刷Java记录第一天
第一题
下列程序输出啥?
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); } }
解析:
做这道题之前,需要明白三个知识点:
==
符号比较引用类型时,比较的是双方的地址。String s = "xxx"
或者,String s = "xxx" + "yyy"
,这种创建String类型变量的情况,都是把变量存到常量池中。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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~