对字符串比较来说,首先要区别==和equals,==表示比较的两个对象在堆中的物理地址一致且值相等。equals只需要值相等。
对于你的问题。
1.System.out.println(s3 == s1 + s2); // false
s1+s2后他会在堆中划开一块新的物理地址,然后值是“ab”,而它与s3的比较是==,因为值相等,但是在堆中的物理地址不一致,所以返回false。
2.System.out.println(s3 == "a" + "b"); // true
“a”+"b"这涉及到字符串池的问题“a”+“b”他会去堆中的字符串池中寻找一下是否有开辟过"ab",因为你声明的时候写了String s3 = "ab";这就代表你之前在堆中有了这块内容了他就不再从新开辟新空间了,而是指向这块空间。而恰好这块空间在物理地址上和s3一致且值相等,所以返回true
|