字符串常量池

1.字符串是常量的,他们一旦被创建是不能被改变的

在这里插入图片描述
左为栈,右为堆

2.如果对字符串多次拼接,不建议用String类,而是用StringBuffer类

public final class string //final 不可继承

public final char value [];//是引用不能改变,不是值不能改变;

String str = new String(“hello”);创建了多少个对象?

String str = new String("hello");

如果之前不存在hello,先在常量池中创建一个hello字符串,则产生了2个对象+1个引用
如果存在,则产生一个对象(堆中)+1个引用

初始:常量池为空

  1. String str1 = new String (“a”+“b”);产生了多少对象?(暂时不考虑引用类型)

4个 1个引用在这里插入图片描述
new 在堆中开辟空间产生对象!

  1. String str2 = new String (“abc”) + “abc”;
    产生多少对象?
    3个(堆中一个abc,常量池abc和abcabc)
    一个引用

字符串,如果直接使用字面量
String str = “abc”,则从常量池中找
如果使用的是new,则从堆中找(而堆中又会从常量池中找,如果从常量池中找不到,则会在常量池中创建,并以弄该常量池中的字符串 --使用常量池中的内存地址)

字符串如果通过new创建,则必然会直接指向堆中的对象

如果new之后,仍然想从常量池中获取,则需要用 inter();
String中的inter()方法可以让引用直接指向常量池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值