java String的内存分配

近日小编学习了《深入理解java虚拟机》,其中对于java中String的内存分配自己的一些理解,话不多说上代码。

                String str1 = "hello";
		String str2 = "hello";
		String str3 = new String("hello");
		String str4 = new String("hello");
		System.out.println(str1==str2);
		System.out.println(str1==str3);
		System.out.println(str3==str4);
		System.out.println(str2==str4);

 

 出现上面的结果其实我们并不意外,因为在java在String内存模型中我们的String没有用对象new出来的hello都是放于常量池的,也就出现了str1==str2的情况,而java中的对象都是置于java堆中的,每当要用一个对象就new一个,每次引用的对象是不一样的,所以我们的str3==str4为false的情况也就是这样。对于常量池里的值和新建对象的值也是不一样的,也就是我们的str1==str3为false的情况。

在这里如果有学习高并发的可能会有所了解这里有一个点就是有时候可能会同时锁住常量池中的一个值,这个时候会造成死锁,使用在高并发编程里面对于String的应用还是要多加注意。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值