下面程序的运行结果是(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
|