黑马程序员技术交流社区

标题: String特别容易出错的两个题 [打印本页]

作者: 左右.律    时间: 2016-9-8 23:27
标题: String特别容易出错的两个题
题一
[Java] 纯文本查看 复制代码
 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))

题二
[AppleScript] 纯文本查看 复制代码
 String s1 = “abc”;
   String s2 = new String(“abc”);
   System.out.println(s1==s2);
   String s3 = “你好吗”;
   String s4 =”你”+ ”好吗”;
   System.out.println(s3==s4))

    前半部分自然不用说,因为String s1 = "abc"在常量池只会存在一个对象,而new String("abc")会存在两个对象,而且变量指向的是堆上的对象,所以地址不同;
后半部分常量与变量会有区别,字符串变量相加,在常量池中会开辟新的空间,我认为,因为是变量,java无法确定相加后的结果是什么,在内存中是否已经存在,所以先准备好了空间,在由地址找到数据,将结果相加后存到开辟的空间中;如果是常量相加的话,由于java的常量优化机制,能够直接判断两个常量相加的值,在判断该值是否已经存在,存在就不用建立新的对象了,所以题二结果为true,题一为false.





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