我是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变化?
答案 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。
它的值就像一个盒子里碰巧有两个不同的名字,但它仍然是同一个地址,具有相同的地址,因此具有相同的内容。
我希望有所帮助。