1

我真的很困惑这个概念:

/* Example with primitive data type */

public class Example1 {

public static void main (String[] args){
int a = 1;

System.out.println("a is " + a);
myMethod( a );
System.out.println("a is " + a);

}

public static void myMethod(int b){

b = 3;
System.out.println("b is " + b);

    }
}

输出:

a 是 1

b 是 3

a 是 1

为什么“a”不改变?当 int i 初始化为零时,这个原始变量如何改变 FOR LOOP 或 WHILE LOOP?像这样:

int i = 1;
while (i < = 3) {
 System.out.println(i);
 i *= 2;
}

输出:

1

2

请详细告诉我,因为我真的很困惑。i 是原始类型,为什么它会更新,为什么 int a 在第一个程序中没有?

4

2 回答 2

1

myMethod() 是无效的,如果它返回一个 int 并且你分配了 a=myMethod(a) 那么它会改变

int a = 1;
System.out.println("a is " + a);
a= myMethod(a); //where myMethod is changed to return b instead of void
System.out.println("a is " + a);

a 是 1

b 是 3

a 是 3

于 2013-04-08T10:28:24.800 回答
0

为什么“a”没有变化

因为您的原始a内部与myMethodavoid main. 将其完全视为另一个变量,并将其值复制到myMethod. 此原语的生命周期在此方法执行结束时结束。

如果您有 C++ 背景,那么这个解释可能会有所帮助:

  • 当您将原始类型参数传递给方法时 - 您正在传递正在复制的变量。你传递的是价值,而不是实例。
  • 当您将对象作为参数传递给方法时 - 您正在传递对该对象的引用,更准确地说:在 java 中,正在传递引用值的副本。这就像将对象地址的副本传递给方法一样。如果您在此方法内修改此对象,则修改将在方法外可见。如果你=null=new Obj它,它只会影响你的方法内部的对象。
于 2013-04-08T10:46:50.920 回答