Java面试题—不可变字符串—字符串在切割拼接过程中产生内存地址的数量?

问:

String greeting="Hello",现如果希望将greeting的内容修改为“Help!”,故greeting=greeting.substring(0,3)+"p!";,在此过程中共产生了多少内存地址?

答:

此过程中共产生了4个内存地址。

解释:

java规定不能修改字符串中的字符,所以Java里将String类对象称为不可变字符串,例“Hello”永远包含字符H、e、l、l、和o的代码单元序列,不能修改其中的任何一个字符;但是字符串变量是可以修改的,比如greeting可以引用另一个字符串,此时greeting存放的地址为另一个字符串的地址,原来的“Hello”依然存在。如下图:

由于字符串是不可变的,每产生一个内容不同的字符串就必须产生一个新的内存地址存储它。所以在此题中,“Hello”占用了一个内存地址;greeting.substring(0,3)语句将greeting的“Hel”提取出来,故“Hel”占用一个内存地址;“p!”占用一个内存地址;通过“+”将“Hel”和"p!"拼接成“Help!”,并让greeting引用“Help!”,“Help!”也占用一个新的内存地址。

故在此题中,共产生了四个内存地址,分别存放“Hello” “Hel” "p!" "Help!"。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值