黑马程序员技术交流社区
标题:
大牛解释下这道面试题
[打印本页]
作者:
jaunce
时间:
2015-8-26 07:51
标题:
大牛解释下这道面试题
public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); //false
System.out.println(s3 == "a" + "b"); //ture
作者:
巧克黑力
时间:
2015-8-26 08:26
s1s2是两个对象
作者:
javazhang
时间:
2015-8-26 16:36
本帖最后由 javazhang 于 2015-8-26 16:39 编辑
s1,s2分别是字符串常量池中的两个变量所对应的地址值,相加肯定和s3的地址值是不同的,而字符串相加后的内容都是ab,同样是方法区常量池的一个变量,指向同一个地址值,故前者为false后者为true
作者:
哈皮哈皮doge
时间:
2015-8-26 22:29
“a”+"b"编译器会优化为ab,所以认为和s3是同一个;s1+s2属于字符串变量之间相加,会新产生一个StringBuilder类的对象,并用append方法将s1和s2拼接起来,显然s3和新产生的这个对象的地址不一样
作者:
心之谷96
时间:
2015-8-26 22:39
System.out.println(s3 == s1 + s2);
两个字符串对象相加等于另外一个字符串对象,有没有觉着奇怪?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2