为什么分配的 java 变量表现得像一个引用?
why is assigned java variable behaving like a reference?
嗨,我不知道以前是否有人问过这个问题,但这真的很烦人...
好的,所以我有一个 class 叫做测试:
public class Test {
public static Test testObject = new Test(5);//Creates a test object with an initialized value of 5;
int number;
public Test(int number){
this.number = number;
}
}
当然还有我的主要 class...
public class Main {
public static void main(String args[]){
Test anotherObject = Test.testObject;//this is not a reference right?
System.out.println(Test.testObject.number);//This prints 5
anotherObject.number = 50;// changing anotherObject's number. NOT testObject's Number.
System.out.println(Test.testObject.number);//if that was true this whould of still been 5, but it prints 50!!?? why does testObject's number even change if im not even changing that value?
}
}
如果我做错了什么,请告诉我,非常感谢!
在您的程序中,您有一个 Test
的单个实例,只是每次都以不同的方式命名。
Test anotherNumber = Test.testObject;
是否不创建新对象。它只引用同一个对象,你说 "Whenever I write anotherNumber
, I actually meant to write Test.testObject
".
因此,当您稍后更改 anotherNumber.number = 50;
时,您会执行:Test.testObject.number = 50;
,因此当您打印 Test.testObject
时,您会看到 50。
编辑:
如果你希望能够创建某个对象的副本,你可以引入一个复制构造函数:
public Test(Test original) {
this.number = original.number;
}
并与someOtherNumber = new Test(Test.testObject);
一起使用
在您的 class 测试中,您正在创建一个始终为 5 的新测试对象。因此,取出您在测试 class 中创建的测试对象,然后使用以下命令主要方法中的代码:
Test anotherNumber = new Test(5);
System.out.println(anotherNumber.number);
anotherNumber.number = 50;
System.out.println(anotherNumber.number);
嗨,我不知道以前是否有人问过这个问题,但这真的很烦人...
好的,所以我有一个 class 叫做测试:
public class Test {
public static Test testObject = new Test(5);//Creates a test object with an initialized value of 5;
int number;
public Test(int number){
this.number = number;
}
}
当然还有我的主要 class...
public class Main {
public static void main(String args[]){
Test anotherObject = Test.testObject;//this is not a reference right?
System.out.println(Test.testObject.number);//This prints 5
anotherObject.number = 50;// changing anotherObject's number. NOT testObject's Number.
System.out.println(Test.testObject.number);//if that was true this whould of still been 5, but it prints 50!!?? why does testObject's number even change if im not even changing that value?
}
}
如果我做错了什么,请告诉我,非常感谢!
在您的程序中,您有一个 Test
的单个实例,只是每次都以不同的方式命名。
Test anotherNumber = Test.testObject;
是否不创建新对象。它只引用同一个对象,你说 "Whenever I write anotherNumber
, I actually meant to write Test.testObject
".
因此,当您稍后更改 anotherNumber.number = 50;
时,您会执行:Test.testObject.number = 50;
,因此当您打印 Test.testObject
时,您会看到 50。
编辑:
如果你希望能够创建某个对象的副本,你可以引入一个复制构造函数:
public Test(Test original) {
this.number = original.number;
}
并与someOtherNumber = new Test(Test.testObject);
在您的 class 测试中,您正在创建一个始终为 5 的新测试对象。因此,取出您在测试 class 中创建的测试对象,然后使用以下命令主要方法中的代码:
Test anotherNumber = new Test(5);
System.out.println(anotherNumber.number);
anotherNumber.number = 50;
System.out.println(anotherNumber.number);