String str = new String("abc") 创建了几个对象?

1、以下代码创建了几个对象

String str = new String("abc");

    创建了两个对象。

    第一个对象是:"abc",存在于字符串池中;第二个对象:new String(),存在于堆(heap)中(堆专门用于存储对象)。

 

2、以下代码创建了几个对象

String str = "abc";

    创建了一个对象,这个对象是:"abc",存在于字符串池中。

 

3、以下代码创建了几个对象

String str1 = "abc";
String str2 = "abc";

    创建了一个对象。

    执行 str1 时,在字符串池中创建了对象 "abc";执行 str2 时,先到字符串池中查找是否有 "abc",如果有,则将其地址返回给 str2 ,str2 引用了对象 "abc",并没有创建新的对象。

 

4、以下代码创建了几个对象

String str = "ab" + "c";

    创建了三个对象。

    这三个对象都在字符串池中,三个对象分别是:"ab" , "c" , "abc" 。

 

 

说明

1、以上所说的字符串池也叫常量池,存在于Java虚拟机(JVM)中,常量池中保存着很多String对象,且可被共享使用。

      String类是被final修饰的,一经创建不可被改变,因此不会因共享而产生程序混乱。

      常量池由String类维护,可调用intern()方法来访问。

2、只有使用双引号(" ")创建的String对象、及由双引号(" ")和加号(+)创建的String对象,才会被放到常量池中。

     只要使用了new(包括null)来创建的String对象、即使包含了双引号(" ")或加号(+),也不会被放入常量池,一定是被放在堆(heap)中。

    使用双引号(" ")创建String对象,有助于提高程序运行效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值