Java关于"=="操作符的问题


String s1 = "yes", s2 = "yes";
System.out.println(s1 == s2);
输出true;


String s1 = new String("yes"), s2 = new String("yes");
System.out.println(s1 == s2);
却输出false;

为什么呢?

Java有个字符串常量池的概念,简单来说,就是在常量池里面放入"yes",然后s1和s2都是指向这个"yes",s1 == s2是true。
new String("yes") 相当于创建一个对象,指向这个"yes",所以s1和s2分别对应两个不同的对象,s1 == s2是false。

字符串相当不能用==判断,要用equals
https://www.cnblogs.com/liukedong/p/3344653.html

s1==s2比较的是两者的地址是否相同,
1.s1和s2在字符串常量池中,地址相同,返回true
2.s1和s2是被new出来的新对象,new出来的在堆中,指向堆中的一个引用,所以地址不同,返回false