String s3 = s1+s2;
String s4 ="ab";
首先,明确一下 s3 和 s4分别创建了几个对象,s3是分别会创建3个对象,s1,s2,s3,因为字节码文件编译时候无法确定字符串的值,所以在运行后会new 出s1和s2的对象,然后再创建一个s3的对象分别指向s1 和s2对象的值,个人感觉,这里s3指向s1和s2有点软引用的感觉,至于s4则是字节码加载时候就已经确定了值,所以会在字符串常量池创建这么一个字符串常量,并将s4对象地址指向该常量,由于==比的是地址值。所以地址值当然不一样了
|