java中的Ex:
class A {
private Integer x = new Integer(0);
public void setValue(Integer q) {
q = 20;
}
public void callX() {
setValue(x); // this does not set x to be 20, which is what i need. Is there a way?
}
}发布于 2011-03-29 19:21:46
你不能。
包装器类型是不可变的,因此它们有效地模拟了原始类型的行为:通过执行q = 20,您可以使参数q使用值20指向Integer的新实例,但它不会更改调用方法中由x引用的原始实例。
发布于 2011-03-29 19:21:22
你可以使用AtomicInteger,它是可变的:
private AtomicInteger x = new AtomicInteger(0);
public void setValue(AtomicInteger q) {
q.set(20);
}
public void callX() {
setValue(x);
}发布于 2011-03-29 19:30:03
在Java中,这种行为会被认为是非常混乱的。通常,像setValue这样的设置器接受一个值,并且不改变它的参数。getter通常用于返回值。
顺便说一句:除非你有充分的理由,否则不要使用包装器。
相反,您可能会这样做。
class A {
public int getValue() {
return 20;
}
public void callX() {
int x = getValue(); // this sets x to be 20.
}
}https://stackoverflow.com/questions/5471642
复制相似问题