1.3 String为什么是不可变的,以及new String(“abc”)创建了几个对象

String为什么是不可变的
String类中使用字符数组保存字符串,数组前有final修饰符,所以string对象是不可变的。
private final char value[];
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变的
char[] value;

String str1 = new String("abc")创建了几个对象
一个或者两个
当字符串常量池中已经有了"abc"这个字符串对象,则new String("abc")创建了1个对象,即在堆内存中创建一个存储"abc"的String对象。
当字符串常量池中没有"abc"这个字符串对象,则new String("abc")创建了2个对象,分别是"abc"这个字符串对象和在堆内存中创建一个存储"abc"的String对象。

String str2="abc" 可能创建一个对象或者不创建对象,如果"abc"在字符串常量池里不存在,会在字符串常量池里创建一个字符串对象"abc",如果已经存在,str2直接引用这个字符串常量池里的对象。

下面这篇博客写到了字符串常量池、运行时常量池的存储位置,以及在JDK1.8中,使用元空间代替永久代来实现方法区。

https://www.cnblogs.com/cosmos-wong/p/12925299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值