private static final String MESSAGE = "taobao";
static void run(){
String a = "taobao";
String b = "tao";
String c = "bao";
                System.out.println(a == MESSAGE);
System.out.println((b+c) == MESSAGE);//为什么这个是false?
        }
求大牛们指点

解决方案 »

  1. 在做字符串的连接的时候往往是开辟一个新内存空间,把bc的值复制过去连接,所以b+c的地址跟a的地址是不一样的,而给a赋值的时候,内存中已经有一个区域是taobao了,所以就直接引用过去了。另,如果后文对a的值进行修改,过程也是先新分配空间在把a的指向改过去,而不是在a所指向的原有空间中进行直接修改
      

  2. 有一个字符串连接池的概念,每一个string类型都会在内存中开辟一个空间,==比较的是物理地址,所以b+c) == MESSAGE是false 用equals比较的是两个参数的值,
      

类似问题 »