答案 0 :(得分:55)
答案 1 :(得分:18)
答案 2 :(得分:15)
有两种方法可以通过引用传递
以下是一个示例代码:
public class Test {
public static void main(String args[]) {
Integer a = new Integer(1);
Integer b = a;
Test.modify(a);
System.out.println(a);
System.out.println(b);
IntegerObj ao = new IntegerObj(1);
IntegerObj bo = ao;
Test.modify(ao);
System.out.println(ao.value);
System.out.println(bo.value);
}
static void modify(Integer x) {
x=7;
}
static void modify(IntegerObj x) {
x.value=7;
}
}
class IntegerObj {
int value;
IntegerObj(int val) {
this.value = val;
}
}
输出:
1
1
7
7
答案 3 :(得分:14)
上面的答案很好地解释了OP的实际问题。
如果有人需要传递需要全局更新的数字,请使用AtomicInteger(
)而不是创建建议的各种包装类或依赖第三方库。
AtomicInteger(
)当然主要用于线程安全访问,但如果性能不受影响,为什么不使用这个内置类。额外的好处当然是明显的线程安全性。
import java.util.concurrent.atomic.AtomicInteger
答案 4 :(得分:12)
答案 5 :(得分:6)
答案 6 :(得分:2)
答案 7 :(得分:2)
答案 8 :(得分:0)
1)仅将引用副本作为值发送给形式参数。当给形式参数变量赋其他值时,形式参数的引用会更改,但对于此整数对象,实际参数的引用将保持不变。
公共类谅解对象{
public static void main(String[] args) {
Integer actualParam = new Integer(10);
changeValue(actualParam);
System.out.println("Output " + actualParam); // o/p =10
IntObj obj = new IntObj();
obj.setVal(20);
changeValue(obj);
System.out.println(obj.a); // o/p =200
}
private static void changeValue(Integer formalParam) {
formalParam = 100;
// Only the copy of reference is set to the formal parameter
// this is something like => Integer formalParam =new Integer(100);
// Here we are changing the reference of formalParam itself not just the
// reference value
}
private static void changeValue(IntObj obj) {
obj.setVal(200);
/*
* obj = new IntObj(); obj.setVal(200);
*/
// Here we are not changing the reference of obj. we are just changing the
// reference obj's value
// we are not doing obj = new IntObj() ; obj.setValue(200); which has happend
// with the Integer
}
}
IntObj类{ 整数a;
public void setVal(int a) {
this.a = a;
}
}