关于String a=new String("a")创建几个对象问题的正确答案

我们知道String是个不可变的常理,每次赋值都会创建一个对象,但是今天遇到个问题,String a=new String("a")创建了几个对象?

首先我举个列子来复习下String;

String  s="Hellow";

s="android";

String str="android";

String  s=new String("a");

在jvm的工作过程中,会创建一片的内存空间专门存入string对象。我们把这片内存空间叫做string池。  

我们先来看下String s="Hellow",定义了一个String s的变量,“Hellow”为String 对象,当JVM检查到“Hellow”的时候。如果string池中有“Hellow”对象,就直接把其引用给s不会重新创建string对象,如果没有就创建string对象,并将其引用给s。这里没有就创建string对象

再来看下s="android";同样当JVM检查到“android”的时候。如果string池中有“android”对象,就直接把其引用给s不会重新创建string对象,如果没有就创建string对象,并将其引用给s。这样也没有就创建string对象.

所以

String  s="Hellow";

s="android";就创建了两个对象。

String str="android";再来看下,我们定义了一个str的字符串。并将“"android"”对象引用给他,上面提到JVM检查到”android“,就将其引用给str,由于上面s="android"已经创建了"android"string对象,所以这里就直接将"android"对象引用给str,并且str==s.因为两个字符串引用相同。

最后String  s=new String("a");

"a",JVM检查没有就创建,有就引用,

new String这里又手动创建了一个string对象.

因此String a=new String("a")一共创建了两个对象

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值