String字符串相等判断
== :⽐较的是内存地址值
equals: ⽐较的是值,对象的equals()可以被重写
java中字符串的⽐较:==
String a="abc";
String b="abc"
那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存 ⼀份,所以a和b指向的是同⼀个对象;
String a=new String("abc");
String b=new String("abc");
那么a==b将返回false,此时a和b指向不同的对象。
⽤equals⽅法⽐较的是字符串的内容是否相同
String a=new String("abc");
String b=new String("abc");
equals不等于a.equals(b);
将返回true。
如果是
String s1 = “abc”;
String s2 = “a”;
String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);
A:false,因为s2+s3实际上是使⽤StringBuilder.append来完成,会⽣成不同的对象
String s1 = “abc”;
final String s2 = “a”;
final String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);
A:true,因为final变量在编译后会直接替换成对应的值,所以实际上等于s4=”a”+”bc”,⽽这种情况下,编译器会直接合并为s4=”abc”,所以最终s1==s4。