错题:栈和堆内存

private static final String message="taobao";

String a="tao"+"bao";

String b="tao";

String c="bao";

a==message        :   return true

(b+c)==message :   return false



Java中的变量和基本类型的值存放在栈内存,比如int x=1; int y=1;  变量x,y,1都存在栈中,x指向1,y指向1。==用于判断两个变量指向的地址是否一致,所以x==y返回值为true。

同理String s="Hello",变量s存放在栈中,字符串"Hello"存放在栈中的字符串常量区。

但是String s= new String("Hello"),这是创建了一个对象,变量s在栈内存中,而"Hello"这个String对象在堆内存内,如果再写一个,它仍然是创建一个新的对象,即使String类型的对象内容相同,它们也不是同一个对象,所以进行比较只能用equal方法。

这里(b+c)是存放在堆内存中的String对象。Java对String的相加是通过StringBuffer实现的,先构造一个StringBuffer里面存"tao",然后调用append()方法追加"bao",然后将值为"taobao"的 StringBuffer转化成String对象。StringBuffer对象在堆内存中,转换成的String对象也在堆内存中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值