可以取消引用吗?

时间:2014-09-23 12:39:57

标签: java

请考虑以下代码:

public class Test {

    static private volatile Integer number1 = 42;
    static private volatile Integer number2 = 42;

    public static void main(String[] args) {
        Test test = new Test();
        test.changeInteger(number1);
        System.out.println(number1);
    }

    public void changeInteger (Integer number) {
        number = new Integer(3);
    }
}

我想根据传递给方法number1的参数更改number2changeInteger的值。显然这不起作用。有没有办法在不使用反射的情况下使用Java工作?

澄清:我希望电话changeInteger(number1)更改字段number1

3 个答案:

答案 0 :(得分:4)

public class Test {
    public Integer[] number = {42, 42};
    public static void main(String[] args) {
        Test test = new Test();             //you create a new instance
        test.number[0] = new Integer(3);    //change first element to 3
        test.number[1] = new Integer(2);    //change second element to 2
        System.out.println(test.number[0]); //print first element
    }
}

关于数组:manual 演示:http://ideone.com/aKzQI0

答案 1 :(得分:2)

您需要从方法中返回变量的值。否则变量值的变化限制了'changeInteger'方法的方法调用栈。

 public static void main(String[] args) {
        Test test = new Test();
        number1 = test.changeInteger(number1);
        System.out.println(number1);
    }

    public Integer changeInteger (Integer number) {
        return new Integer(3);
    }

答案 2 :(得分:2)

只是添加到@Margus的答案。 在我的书中,如果变量名称​​永远包含一个数字,例如number1,则表明您没有正确行事。使用数组。

另一方面,如果您的变量实际上是名为,那么您最好使用Hashtable。 类中字段的名称是硬编码的。如果您需要非硬编码的“字段名称”,那么它们不是真正的字段。他们是数据!所以散列表/字典是Java中的正确路径。