黑马程序员技术交流社区

标题: 比较坑的测试题分析 1 [打印本页]

作者: liuchenguangqnm    时间: 2016-4-18 23:36
标题: 比较坑的测试题分析 1
下面程序的运行结果是(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






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2