Java中String内存地址的问题(为什么String 的变量输出不是地址)

为什么String 的变量输出不是地址?
因为所有的类继承Object类,所以单独输出一个对象的时候,他会调用Object.toString,打印出来的就是一串表达地址的字符串,最后调用的toString。
在这里插入图片描述然而我们的String类里重写了toString(),它返回的是String自己,String是什么呢,String其实就是字符数组(),它内部封装了一个字符数组,所以打印字符串就是打印字符数组,而不是地址
在这里插入图片描述
关于Java中String内存地址的问题。
在创建String类型的变量的时候建议使用直接赋值的方法去创建对象,在多个变量使用同一个字符串的时候,
如果采用new 的方法的话,创建出来的对象是放在栈内存中,每个变量都会开辟出新的内存空间来完成储存,不管字符串是否一致。
如果采用直接赋值的方式的话,字符串会放在常量池当中(常量池是堆内存中的一块特殊区域–常量池的位置变化在文末),不管创建多少个对象,都是引用的常量池的那个字符串,
在这里插入图片描述
两种方法相比较下来,直接赋值更加节省内存空间。

(个人理解观点,如有错误,还请纠正。0.0)
在6以及6版本以前 , 常量池是存放在了堆中 .
在7版本中, 将常量池存放到了堆中
在 8 版本之后, 取消了整个永久代区域,用元空间取代, 运行时常量池 和静态常量池存放在元空间中 , 而字符串常量池依然存放在堆中

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值