【问题标题】:String as an Object字符串作为对象
【发布时间】:2015-05-02 19:23:15
【问题描述】:

据我了解,在 Java 中,如果你给 object2 赋予 object1 的值,然后如果你改变 object1 或 object 2,另一个也会改变。但是,对于字符串(我了解到的是对象?),更改一个字符串不会更改另一个字符串。下面是一个例子。改变 s1 不会改变 s2,即使 s2 被赋予了 s1 的值。谁能解释一下?

String s1 = "Ant";
String s2 = s1;
s1 = "Man";

【问题讨论】:

  • 这是什么语言?
  • 如果语言是 Java,那么 s1 和 s2 是 NOT “对象”。它们是对象引用。 s1 = "Man; 完全改变了 s1 所指的对象。原始对象“Ant”自动变为可用于垃圾回收。
  • Java,Foggy 对象引用是什么意思?
  • "并更改其中一个对象" ...您在第二个示例中在哪里执行此操作?您只是重新分配变量 s1,仅此而已。

标签: java string object


【解决方案1】:

如果语言是 Java...

... 那么 s1 和 s2 不是“对象”。他们是object references。

s1 = "Man"; 完全改变了 s1 所指的对象。原始对象值“Ant”不再可供您的程序访问,并自动变为可用于垃圾回收。

本文进一步解释:

http://way2java.com/oops-concepts/reference-variables-anonymous-objects/

【讨论】:

  • Java 中每个可能的字符串是否已经是预设对象,如果你说 s1 = "Man" 那么它只是将 s1 指向那个已经存在的对象内存位置?
  • 在 Java 中,字符串是“不可变的”:当您声明 String s1 = "Ant"; 时,会在堆上创建“Ant”。它可以共享,但值本身不能更改。看这里:Why is String immutable。是的,"String literals"(如您的示例中的“Ant”和“Man”)是在编译时创建的,并在您的二进制 .class 文件中携带。但是通常可以即时创建“字符串”(就像任何其他变量类型一样)。
  • 重要提示:“s1”不是“对象”本身。它只是指“对象”。
猜你喜欢
  • 2015-10-26
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2021-11-24
  • 2018-10-02
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多