我对一件微不足道的事情感到困惑 - 将参数传递给方法并更改它们的值......我最好给你一些代码:
public class Test {
public static void main(String[] args) {
Integer val = new Integer(41);
upd(val);
System.out.println(val);
Man man = new Man();
updMan(man);
System.out.println(man.name);
}
static void upd(Integer val) {
val = new Integer(42);
}
static void updMan(Man man) {
man.name = "Name";
}
static class Man {
String name;
}
}
您能解释一下为什么我传递的 Integer 对象没有更新而 Man 对象更新了吗? Integer 和 Man 对象不是通过引用传递的(由于它们的非原始性质)吗?
最佳答案
因为对于 Integer
,您正在创建一个新对象。对于 Man
,您只需更改其值之一,对象 man
保持不变。
考虑以下几点:
static void updMan(Man man) {
man = new Man();
man.name = "Another Man";
}
这也不会改变您最初的 man
。
--编辑
您可以通过以下方式“模拟”Integer
的可变性:
static void upd(Integer val) {
try {
Field declaredField = val.getClass().getDeclaredField("value");
declaredField.setAccessible(true);
declaredField.set(val, 42);
} catch (Exception e) {
}
}
关于java - 将参数传递给Java中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946523/