-1
private static int test[] =new int[]{2};

public static void main(String[] args) { 
    System.out.println(test[0]);
    test(test);
    System.out.println(test[0]);
}
private static void test(int[] test3) {
    test3[0]=test3[0]+12;
}

打印 :

2
14

如何在不使用数组的情况下实现这一点?如果我使用

private static int test = 2

或者

private static Integer test = 2

它保持 2

4

2 回答 2

0

您需要对变量本身进行赋值:

private static int test = 2;

public static void main(String[] args) { 
    System.out.println(test);
    test = test(test);
    System.out.println(test);
}
private static int test(int test) { 
    return test+12;
}

或者,没有方法调用:

private static int test = 2;

public static void main(String[] args) { 
    System.out.println(test);
    test += 12 // this is the same as: test = test+12
    System.out.println(test);
}
于 2013-05-15T21:55:40.303 回答
0

最好的方法是改变方法以不产生那样的副作用。就像是

private static int addTwelve(int value) {
    return value + 12;
}

然后在方法返回时赋值

test = addTwelve(test); //or just 'test += 12;' in this case 

由于 java 使用按值传递语义,因此您将整数的值传递给方法而不是变量(或对变量的引用)。当您在方法中更改变量时,它只会在方法中更改。它与数组一起工作的原因是数组是一个对象,并且当以对象作为参数调用方法时,会复制对该对象的引用。

这也意味着您可以创建一个将值作为属性的类,并使用test该类的实例调用该方法。它可能看起来像这样

public class TestClass {
    private int test = 2;
    //more if you need to.

    public void setTest(int value) {
        this.test = value;
    }
    public int getTest() {
        return this.test;
    }
}

和方法:

private static void test(TestClass x) {
     x.setTest(x.getTest() + 12); 
}

可以在类addTwelve中创建方法,TestClass甚至更好(当然取决于用例)addValue(int value)

于 2013-05-15T21:57:54.240 回答