A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 726477179 中级黑马   /  2016-8-13 22:19  /  1450 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序的运行结果是(     )
   String s1 = “abc”;
   String s2 = new String(“abc”);
   System.out.println(s1==s2);
   String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5))  
a)        true true
b)        false true
c)        true flase
d)        false false

我选的是B,但是百度出来的答案是D,不是常量优化机制吗?求解答!

10 个回复

倒序浏览
s4+s5是变量相加。无法在编译期确定的
回复 使用道具 举报
s4+s5是变量,虽然被赋值,但依然是变量相加!
回复 使用道具 举报
life写实 发表于 2016-8-13 22:24
s4+s5是变量相加。无法在编译期确定的

原来这样的~
回复 使用道具 举报
方法区中常量池两个地址:一个是"你",一个是"好吗"。通过StringBuffer类append方法和toString方法把两个字符串连接在一起,在堆内存新创建一个内存空间,和常量池中另外一个地址:"你好吗"不同,酱紫。
回复 使用道具 举报
这个很简单   选择d   因为本身地址就不同   比较当然是d
回复 使用道具 举报
==号判断的是地址值,s4+s5是两个变量在相加,常量优化机制.前提是常量
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
chensc 金牌黑马 2016-8-15 20:11:47
9#
学习学习!
回复 使用道具 举报
变量  你自己再看一下
回复 使用道具 举报
那些都是变量,基础视频有讲过这个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马