Java类的字段参考?

问题描述:

我创建了下面的测试,看看Java的如何处理对象和它混淆了我不少。Java类的字段参考?

public class MyClass 
{ 
    public String text = "original"; 
    public MyClass(String text) 
    { 
     this.text = text; 
    } 
} 

然后我创建了以下2种情况:

1.

String object1 = new String("original"); 
String object2 = new String("original"); 
object2 = object1; 
object2 = "changed"; 
System.out.println(object1); 
System.out.println(object2); 

结果:

original 
changed 

2.

MyClass object1 = new MyClass("object1"); 
MyClass object2 = new MyClass("object2"); 
object2 = object1; 
object2.text = "changed"; 
System.out.println(object1.text); 
System.out.println(object2.text); 

结果:

changed 
changed 

现在为什么文本字段共享像一个静态字段?

+2

@DyapaSrikanth:如果你要提供一个答案,请这样做*为*的答案 - 但最好这样做是全英文版,而不是文本发言。 –

现在为什么文本字段共享像一个静态字段?

看这句话:

object2 = object1; 

这是设置object2变量的值是相同object1变量的值。这些变量值都是引用对象 - 它们本身不是对象。

所以这行后,这两个变量都指的是同一个对象的值。如果您通过一个变量更改对象,您仍然可以通过其他变量看到更改。用现实世界的话来说:假设你有两张纸,每张都有你的家庭住址,并将它们分给两个不同的人。第一个去,并绘制你的前门红色,然后第二个去拜访你的房子 - 他们仍然会看到一个红色的前斗。

它以分离三个概念是非常重要的:

  • 对象
  • 变量
  • 参考

一个变量的值(或任何其它表达,实际上)是总是无论是原始值(intchar等)或参考。它的从来没有整个对象。

改变一个变量从未价值的变化不同变量的值,所以在这里:

String object1 = new String("original"); 
String object2 = new String("original"); 
object2 = object1; 
object2 = "changed"; 

...我们改变object2值一次具有相同的值作为object1 ,然后有一个不同的值,指的是带有“更改”文本的String对象。 永远不会改变的object1值。

这是否帮助?如果没有,请询​​问非常具体的情况 - 最简单的方法是选择几种不同的情况,而不是一概而论。

object2 = object1;在此之后object2指的是同一个对象object1指的是。

object2.text =“changed”;这里的值为文本变成改为。既然object1object2指的是同一个对象,所以输出是一样的。

图形表示来解释这种行为

步骤1.

MyClass object1 = new MyClass("object1"); 
MyClass object2 = new MyClass("object2"); 

步骤2.

object2 = object1; 

第三步。

object2.text = "changed"; 

enter image description here