[英]Why I cannot increment integer in void method
我真的很困惑,为什么在这个小例子中i
仍然是0:
public static void main(String[] args) {
int i = 0;
inc(i);
System.out.println(i);
}
private static void inc(int i) {
i++;
}
可能很简单的问题,但我看不到
这是因为您使用的是原始整数,实际上是将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++;
}
当然,如果您要传递对象,那么您是通过引用传递的,因此您可以进行变异而无需返回。
如果你想工作。 您需要包装类似以下的类:
class MyInt {
int i;
}
然后继续将MyInt的对象传递给“ inc”函数。 您将在其中执行以下操作:
private static void inc(MyInt myInt){
myInt.i++;
}
这不是一个好习惯,这只是让您知道,好方法吗? 你把一个setter和getter并执行以下操作
myInt.setI(myInt.getI() + 1);
i
的值作为副本传递到inc()
方法,因此原始int i
不会更新。
原始参数作为VALUE副本传递给方法。
对象参数作为参考的VALUE副本传递给对象。
您要尝试通过引用传递参数,而这在Java中是不可能的。
在Java中,参数通常是由value传递的引用 。 对于本机类型,您可以假定它们是按值传递的。
这里将详细讨论该问题: Java是“按引用传递”还是“按值传递”? 在这里http://javadude.com/articles/passbyvalue.htm (这是我发现的最好的解释)。
简而言之,如果您不想编写任何内容,则AtomicInteger
类可能会有所帮助。
大声笑...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.