为了账号安全,请及时绑定邮箱和手机立即绑定

String类中对象创建的问题

String类中对象创建的问题

侃侃无极 2019-04-25 22:15:45
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就不等了。


查看完整回答
反对 回复 2019-05-16
?
守候你守候我

TA贡献1802条经验 获得超10个赞

因为a是你赋予给他的,而你不能将对象赋给对象,所以进行操作的过程中其实进行了转换,就将b转换为了字符串。


查看完整回答
反对 回复 2019-05-16
?
莫回无

TA贡献1865条经验 获得超7个赞

java里字符串常量也是对象,也就是说"c"也是一个String类型对象,也有自己的方法,可以输出下"c".length()试试。所以"c"的类型和a的类型是一样的,所以可以相加并且赋值给b,所以b的值是"abc",a的值是"ab",因为ab不相等,所以结果是false。因为a,b不是new出来的,所以存栈占内存中可以直接用==来比较,如果是new出来的对象,需要使用equals方法来比较


查看完整回答
反对 回复 2019-05-16
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

c是一个对象,b是另外一个对象。
对象的值存放在栈中,对象会有一个指向这个值的地址
==比的是对象的地址。
你如果用c.equals(b)的话就是true

查看完整回答
反对 回复 2019-05-16
  • 5 回答
  • 0 关注
  • 529 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号