public class Test {
public static void main(String[] args) {
String a = "aa";
String b = "aaaa";
//a+=a;
System.out.println(a+a);
System.out.println(b==(a+a));
//System.out.println(b==a);
}
}
结果如下:
aaaa
false
哪位大神帮忙看一下为什么结果是这样的
应该用equals比较。因为== 比较的是String对象的地址而equals比较的是String的内容
判断字符串相等是不能用==好的 你把它改成 System.out.println(b.equals(a+a));应该就会返回true,另外你如果不是判断而是单纯的把a+a赋值给b然后打印出来,那么就直接写 System.out.println(b=a+a);
因为在java中,=号是用来赋值的,而==是用来做基本类型判断的,equals是用做字符串判断的,各司其职吧
一楼已经是正确答案了 ==比较是这个字符串在内存中的地址
==比较的是字符串的内存地址,equals比较的是对象是否相等,a+a相当于生成了一个新的字符串对象
a+a的过程是调用StringBulider进行两次SB.append(”aa”),结果是一个SB类型值为“aaaa”的对象,储存在临时变量中。然后调用toString方法返回一个String对象和b对象进行比较,两个对象之间的==是进行地址比较,b 指向常量池中的“aaaa”,临时变量指向堆中对象,堆中对象储存一个地址指向常量池中的“aaaa”,b和临时变量的地址不同所以结果是false