关于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")一共创建了两个对象

你可能感兴趣的:(android)