public static void main(String[] args) {
String str = "Hello,World!";
String s1 = "Hello,";
String s2 = "World!";
String s = "Hello," + "World!";
String str2 = s1 + s2;
System.out.println(str2 == str);
System.out.println(s == str);
System.out.println(str2 == s);
System.out.println(s1 == "Hello,");
}
运行结果:
false
true
false
true
有人能解释下,s 与 str2 的内存分配情况吗?
str s1 s2 s 以及最后那个 "Hello," 都是常量,如果两个常量的字面值一样,在存储上实际上只有一份。
而str2不是常量,是程序运行的时候计算出来的,所以它参与的比较都是false
从java角度来说,每声明string类型都会创建一个新的对象,字符串拼接也是,创建新的对象,然后将指针指向声明对象。