String a="ab";String c="abc";String b=a+"c";System.out.println((c==b));//false问题:为啥a是一个对象,而“b”是一个字符串,为啥可以相加得b?为啥得false ?在内存中是怎么变化的,怎样运算的,求大神解惑。
5 回答

慕丝7291255
TA贡献1859条经验 获得超6个赞
如果你能再加一个就更有趣了 String d = "ab" + "c"; c == d的判断结果为true 原因: String b = a + "c"是 一个变量 + 一个已知的字符串 String d = "ab" + "c"是一个已知的字符串 + 另一个已知的字符串 在编译期间,String c的值为“abc”是已知的字面量,String d 的结果也是已知的字面量,所以c和d在jvm编译时都会把常量区的"abc"赋值给它们 而String b在编译期间是未知的,谁知道a在运行时到底是什么,所以jvm会给b开辟一个新的内存空间,因而b和c就不等了。

莫回无
TA贡献1865条经验 获得超7个赞
java里字符串常量也是对象,也就是说"c"也是一个String类型对象,也有自己的方法,可以输出下"c".length()试试。所以"c"的类型和a的类型是一样的,所以可以相加并且赋值给b,所以b的值是"abc",a的值是"ab",因为ab不相等,所以结果是false。因为a,b不是new出来的,所以存栈占内存中可以直接用==来比较,如果是new出来的对象,需要使用equals方法来比较
添加回答
举报
0/150
提交
取消