Java-创建一个String对象,但之后另外分配

时间:2013-12-24 23:39:17

标签: java

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

假设我创建了一个这样的String对象:

String mystring=new String();

现在,如果我接受这个String对象并为其分配一个这样的字符串:

mystring="abc";

这到底发生了什么? mystring是否与原始对象完全对应,还是不同的对象?与String mystring;一样,String mystring=new String();mystring="abc";代表什么的简称?

2 个答案:

答案 0 :(得分:3)

String mystring = new String();

创建一个新的String对象,并将其引用值赋给变量mystring

所以

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

然后你做

mystring="abc";

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

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

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

  

Like String mystring;是String mystring = new的短期内容   串();

String mystring;是变量声明。执行该行时,声明变量mystring但未初始化。

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

  

什么可以mystring =“abc”;代表什么?

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

理解字符串是不可变的也很重要。创建String对象后,无法更改它。例如,在以下代码中

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

您没有更改name引用的对象,您正在创建一个新对象并将其值赋给变量name

The String API does not provide any methods to change its value.因此我们将其称为不可变

考虑浏览Java String tutorial

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

答案 1 :(得分:0)

您正在使用mystring更改mystring="abc";这与原始对象完全不同。 mystring是一个不是对象的变量。