【发布时间】:2021-05-03 04:25:09
【问题描述】:
在 Java 中,非原始数据类型通过引用传递。因此,这意味着对该对象所做的任何更改都将是全局的。
在下面的代码中,Test 对象被传递给静态函数changeValue() 以更改其属性的值。
所以,据我所知,对象是通过引用传递的,所以输出应该是:
test1:模糊
test2 : 广告牌
但是,输出是:
test1:模糊
test2 : 晕了
我错过了什么?
class Test {
private String value; // instance variable
public void setValue(String value) { // setter function
this.value = value;
}
public String getValue() { // getter function
return value;
}
public static void changeValue(Test test, String value) { //Function to change the value of an object
test = new Test();
test.setValue(value);
}
public static void main(String args[]) {
// Object creation
Test test1 = new Test();
Test test2 = new Test();
// Setting value
test1.setValue("Fuzzy");
test2.setValue("Wuzzy");
// Changing value of test2
Test.changeValue(test2, "Billboard");
// Printing values of the objects
System.out.println("test1 : " + test1.getValue());
System.out.println("test2 : " + test2.getValue());
}
}
【问题讨论】:
-
“非原始数据类型通过引用传递” 这并不完全正确 - 在 Java 中,非原始数据类型是引用类型,但引用是值并且是按值传递。
-
方法 changeValue 没有改变值。它正在创建一个新对象。 (test = new Test();)
-
changeValue()是静态的或按原样实现没有任何意义。setValue()是正确的:模仿。 “在 Java 中,非原始数据类型通过引用传递”:不,它们不是。即使是这样,您的changeValue()方法也不会按预期工作。 -
糟糕的标题。重写以总结您的具体技术问题。
标签: java static-methods