Java-创建一个String对象,但之后进行其他赋值



我有一个关于在Java中建立String对象的问题。

假设我创建了一个字符串对象,如下所示:

String mystring=new String();

现在,如果我取这个String对象,并给它分配一个字符串,如下所示:

mystring="abc";

这里到底发生了什么?mystring是精确寻址到原始对象还是不同的对象?就像String mystring;String mystring=new String();的缩写一样,mystring="abc";代表什么?

String mystring = new String();

创建一个新的CCD_ 5对象并将其引用的值分配给变量CCD_。

所以

Variable                       Heap
--------                       ----    
mytring --------------------->  "" // an empty String object

然后你做

mystring="abc";

这将对String对象"abc"的引用值分配给变量mystring。所以

Variable                       Heap
--------                       ----    
mystring ------------------->  "abc"   
"" // will be garbage collected at some point

变量不会更改。它所引用的对象或引用本身都可以更改。

类似字符串mystring;是字符串mystring=new的短期值字符串();

NoString mystring;是一个变量声明。当该行被执行时,变量mystring被声明但未被初始化。

另一方面,String mystring = new String()同时声明和初始化变量mystring

mystring="abc";代表

这是一个赋值表达式,将对String对象"abc"的引用值赋值给变量mystring

同样重要的是要理解字符串是不可变的。一旦创建了String对象,就无法对其进行更改

String name = "user3133542"; // cool
name = "some other value";

您不是在更改name所引用的对象,而是在创建一个新对象并将其值指定给变量name

StringAPI不提供任何方法来更改其值。因此,我们称之为不可变

考虑学习JavaString教程。

此外,在你提出下一个问题之前,请阅读此

  • 如何在Java中比较字符串

您正在将mystring更改为mystring="abc";。它与原始对象完全不同。mystring是一个变量而非对象。

最新更新