繁体   English   中英

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

[英]Java- creating a String object but assigning otherwise afterwards

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

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

String mystring=new String();

现在,如果我使用这个 String 对象并为它分配一个像这样的字符串:

mystring="abc";

这里究竟发生了什么? mystring是完全指向原始对象还是不同的对象? String mystring; String mystring=new String();的简写String mystring=new String(); 什么可以mystring="abc"; 代表?

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

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

像 String mystring; 是 String mystring=new String() 的短期;

没有String mystring; 是一个变量声明。 执行该行时,变量mystring已声明但未初始化。

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

什么可以 mystring="abc"; 代表?

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

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

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

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

String API 不提供任何更改其值的方法。 因此我们称它为不可变的

考虑阅读Java String教程

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM