这道题目java面试比较多,求大神解答他的输出值。并讲个道理呗

请分析下,这道题目java面试比较多,求大神解答他的输出值。并讲个道理呗
最新回答
风行水上

2024-04-21 01:03:36

输出值分别是:
false
true
true

这个“==”号,对于引用型变量来说,不只是要判断变量的值,更主要表示的是两个变量在堆中存储的地址是否相同。
第一,程序一开始在内存中创建了s1=“Programming”的对象,接着又来了个s2=new String("Programming"),注意,s2使用new操作符,所以系统会new一个对象出来,也就是再新建一个对象,所以s1和s2就不会在同一内存地址上。因此为false。记住了,凡是有new的对象,其创建出来的内存地址肯定不一样。
第二,“Program”+“ming”这两字符串相+,结果就是“Programming”,所以就相当于s3=“Programming”,而在创建s3对象时,程序首先会在这个String内存中寻找相同值的对象,也就是找到具有相同值的s1,然后s3引用了s1所引用的对象,也就是说s3与s1指向了同一个存储“Programming”字符串的地址。
第三,看String的intern()方法描述就知道,该方法返回字符串对象的规范化表示形式,也就是返回字符串本身,所以true。