刨析String对象常用的创建方式-日记篇

String数据的存储:

一般有new String的话,都会在堆中开辟一个空间存储常量池的地址;如果是直接String str = “str”;这样的方式的话就直接str指向常量池的字符串常量地址。

在这里插入图片描述

看到源码,String的数据存储是存储在一个final的char数组。

创建字符串的对象方式很多,其中有两种常用的:

在这里插入图片描述

这里的是当以s1的方式来创建,那么就会先查看常量池是否存在该字符串,如果存在,那么就直接地址指向该常量池的字符串地址;如果没有,那么直接在常量池开辟空间,创建该字符串常量,然后地址被s1指向。

按照s2的方式,如果常量池有该字符串常量,那么,在堆里开辟空间value,地址为0x11,value存储的内容为常量池的地址0x99,s2指向value的地址;如果常量池没有,那么也要在常量池先造出"haha"这个字符串常量,然后再让堆的value保存常量池的字符串地址,s2指向value的地址。

  • 方式3

String s = "hehe" + "haha"

这个会在常量池创建一个字符串常量hehehaha然后让s指向该常量地址

  • 方式4

在这里插入图片描述

这里的a直接指向常量池的常量地址。有new的方式比如c则是在堆里再指向池里的对象。

可以追一下源码:

在这里插入图片描述

看到这里是new一个,那么确实是要在堆中开辟一个空间来存储常量池的地址了,实锤了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值