黑马程序员技术交流社区

标题: 有没有大神教教啊,求解? [打印本页]

作者: 南柯一梦境    时间: 2015-5-27 23:09
标题: 有没有大神教教啊,求解?
  1. 2. public static void main(String[] args) {
  2.         String s1 = "a";
  3.         String s2 = "b";
  4.         String s3 = "ab";
  5.         System.out.println(s3 == s1 + s2);//false
  6.         System.out.println(s3 == "a" + "b");//true  
复制代码

请问一下System.out.println(s3 == s1 + s2);//false这里怎么理解啊,原理是啥啊?真心不懂
作者: l763631191    时间: 2015-5-27 23:29
本帖最后由 l763631191 于 2015-5-27 23:31 编辑

String s1 = "a";   是一个对象
String s2 = "b";   又一个对象
String s3 = "ab";  又一个对象  
    此时内存中有3个字符串对象  所以内存中开辟了3个空间,有3个内存地址
     所以s3 == s1 + s2  肯定是假的
   "a" + "b"即为:“ab”  有了第4个对象 String s4=“ab”;
    当字符串的内容一样时,就不会再开辟空间了而是把s3的字符串对象放在常量池中(位于共享区)。
    s3  s4指向的都是同一个地址了,所以相等。

作者: guoyangpeng    时间: 2015-5-28 06:22
受教了!
作者: 绝版坏银    时间: 2015-5-28 07:15
受教了。。
作者: 2119391569    时间: 2015-5-28 07:25
一楼正解,顶一个!
作者: 山崩地裂    时间: 2015-5-28 07:42
一楼正解,字符串好像都是存放在字符串常量池中的,
作者: niuapp    时间: 2015-5-28 08:14
一楼说的好啊
作者: kmlitheima    时间: 2015-5-28 10:03
把==改成equals就是跟你想象的变得一样了!




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