我真的很困惑为什么在这个小例子i
仍然是0:
public static void main(String[] args) {
int i = 0;
inc(i);
System.out.println(i);
}
private static void inc(int i) {
i++;
}
可能非常简单的问题,但我没有看到它
答案 0 :(得分:11)
答案 1 :(得分:3)
这是因为您使用的是原始整数,实际上您将i
的值传递给inc
而不是i
的引用。在这种情况下,只需从inc
方法返回一个值:
public static void main(String[] args) {
inc i = 0;
i = inc(i);
System.out.println(i);
}
private static int inc(int i) {
return i++;
}
当然,如果你正在传递物体,那么你就是通过引用传递的,所以你可以在不返回的情况下进行变异。
答案 2 :(得分:1)
如果你想工作。您需要包含如下所示的类:
class MyInt {
int i;
}
然后你继续将MyInt的对象传递给“inc”函数。您将在其中执行以下操作:
private static void inc(MyInt myInt){
myInt.i++;
}
不是一个很好的练习,这只是为了让你知道,好方法?你把一个二传手和吸气器做了以下
myInt.setI(myInt.getI() + 1);
答案 3 :(得分:0)
i
的值作为副本传递给inc()
方法,因此原始int i
不会更新。
原始参数作为VALUE副本传递给方法。
对象参数作为REFERENCE的VALUE副本传递给对象。
答案 4 :(得分:0)
您要做的是通过引用传递参数,这在Java中是不可能的。
在Java参数中,通常是通过值传递的引用。对于本机类型,您可以假设它们是按值传递的。
这个问题在这里详细讨论:Is Java "pass-by-reference" or "pass-by-value"?和http://javadude.com/articles/passbyvalue.htm(这是我发现的最佳解释)。