对象的设置值正在影响另一个对象

时间:2015-10-28 22:06:28

标签: java

我是Java的新手。

我厌倦了以下java代码

public class A {

int x;

public static void main(String[] args) {

    A a1= new A();
    a1.setX(5);
    A a2=a1;

    System.out.println(a1.getX());
    System.out.println(a2.getX());
    a2.setX(10);

    System.out.println(a1.getX());
    System.out.println(a2.getX());

}
public int getX() {
    return x;
}
public void setX(int x) {
    this.x = x;
}

}

我认为输出将是

5 5

5 10

但是当我编译并运行代码时,输​​出就会变为 五 5

10 10

为什么a1 x值随a2 x变化?

3 个答案:

答案 0 :(得分:6)

A a2=a1;

此语句使a2变量表示a1表示的内存中的相同位置。因此,您在此内存位置对对象所做的任何更改都会更改相同的内存块,就像您对a1进行更改一样。

如果您希望a2指向不同的内存位置,则需要分配内存来保存新值,就像使用a1一样:

A a2 = new A();

答案 1 :(得分:5)

java中的对象由引用定义。这意味着当您执行a2 = a1时,a2指向与a1相同的实例意味着什么。这意味着改变另一个也会改变另一个

答案 2 :(得分:1)

您已声明了一个名为a1的对象。并将其值设置为5.所以它的名称= a1,value = 5.让我们假装a1的地址是0x123。

然后你宣布了一个名为a2的对象,并告诉它它与a1具有相同的地址。当你说a2 = a1时。因此,无论a1(以5开头)中的任何内容都将由a2指向。在这两种情况下,a1和a2的地址都是0x123。

然后将a2中的值设置为10.换句话说,地址0x123处的值将为10.但a1也具有地址0x123,因此无论您是打印a1还是a2都无关紧要指向位于0x123的相同内存位置的值10。

它的值就像一个盒子里碰巧有两个不同的名字,但它仍然是同一个地址,具有相同的地址,因此具有相同的内容。

我希望有所帮助。