1

我有一个方法:

public static void MutableInt (int newValue) {
    AtomicInteger atomicInteger;
    atomicInteger = new AtomicInteger(10);
    newValue = atomicInteger.get();
}

然后在 main 中调用:

    int x=3;
    MutableInt(x);
    System.out.println("After invoking MutableInt method, x = " + x);

结果仍然是 3. 是否有可能以这种方式改变 int ?

4

3 回答 3

1

没有。无论你做什么,里面mutableInt()的价值x都会留下来3。更改它的唯一方法是使该方法返回一个 int 并将其分配给x,或将x其自身更改为可变对象(如AtomicInteger)。

于 2016-09-12T17:56:16.733 回答
0

并不真地。Java 参数是按值而不是按引用传递的,因此在方法内部修改变量对在其外部声明的变量没有任何作用。你可以做类似的事情

public static int MutableInt (int newValue) {
    AtomicInteger atomicInteger;
    atomicInteger = new AtomicInteger(10);
    return atomicInteger.get();
}

int x = MutableInt(3);
System.out.println("After invoking MutableInt method, x = " + x);
于 2016-09-12T17:59:19.647 回答
0

首先,您将原语传递给方法,而不是对对象实例的引用。即使使用自动装配,如果您将 int 变量设置为方法内的其他内容,由于您没有返回任何内容,因此方法范围之外的变量不会被更改。

如果您改为传递一个 Integer 对象,则如果您在方法内部更改 Integer 的值,则该方法外部的值将被修改,只要它不是方法签名中的最终值。

您在方法内创建中间 AtomicInteger 的事实并不重要,因为它只存在于方法的范围内。

于 2016-09-12T18:04:07.247 回答