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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuchenguangqnm 中级黑马   /  2016-4-18 23:36  /  439 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面程序的运行结果是(D)
   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)   truetrue no
b)   falsetrue
c)   trueflase no
d)   falsefalse  

如上题,主要考察三个知识点:
知识点一:String s = "abc"; 实际上是在常量池中新建了一个对象
                  String s = new String("abc");实际上是在堆内存中新建了一个对象
知识点二:运算符中的 == 号实际上比较的是双方的地址值
知识点三:java中有常量优化机制,即当你定义 String s = "你" + "好吗";的时候,java会先把它们合成"你好吗",再去赋值
                 但是需要注意的是, 如果定义 String s1 = "你"; String s2 = "好吗";  再定义 s3 = s1 + s2;时,java就不会先将它们合成再赋值了
                 因为常量优化机制不能在赋值之前得到s1和s2的数值
所以最后选择D

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马