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

Stu*_*ava 1 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;
}

}
Run Code Online (Sandbox Code Playgroud)

我以为输出会是

5 5

5 10

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

10 10

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

Str*_*ior 6

A a2=a1;
Run Code Online (Sandbox Code Playgroud)

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

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

A a2 = new A();
Run Code Online (Sandbox Code Playgroud)


Nir*_*evy 5

java中的对象由引用定义.这意味着当你做a2 = a1什么意味着a2指向同一个实例时a1.这意味着更换另一个也会改变另一个