时间:2010-07-25 20:24:54

标签: java integer pass-by-reference

9 个答案:

答案 0 :(得分:55)

答案 1 :(得分:18)

答案 2 :(得分:15)

有两种方法可以通过引用传递

  1. 使用Apache Commons库中的org.apache.commons.lang.mutable.MutableInt
  2. 创建自定义类,如下所示
  3. 以下是一个示例代码:

    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;
}

}