String vs StringBuilder vs StringBuffer(底层实现)

String vs StringBuilder vs StringBuffer(底层实现)

一.搞懂字符串常量池细节

常量池是java的一项技术,8种基础数据类型除了float和double都实现了常量池技术。即,把经常用到的数据存放在某块内存中,避免频繁的数据创建与销毁。

字符串常量池是Java常量池技术的一种实现,在较新的JDK版本中,字符串常量池被实现在Java堆内存中。

对字符串常量池建立初步认识:

public static void main(String[] args){
   
	String s1 = "hello";
	String s2 = new String("hello");
	System.out.println(S1==s2); //false
}

第一行代码:
在这里插入图片描述
JVM首先会到字符串常量池中查找该字符串是否已经存在,如果存在会直接返回该引用,如果不存在则会在堆内存中创建该字符串对象,然后到字符串常量池中去注册该字符串。

在本案例中虚拟机首先会到字符串常量池中查找是否有存在"hello"字符串对应的引用. 发现没有后会在堆内存创建"hello"字符串对象(内存地址0x0001), 然后到字符串常量池中注册地址为0x0001的"hello"对象, 也就是添加指向0x0001的引用. 最后把字符串对象返回给s1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值