Java概念混淆:对象和原始类型

时间:2013-04-08 10:25:54

标签: object methods reference primitive

我对这个概念感到很困惑:

/* 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

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

2 个答案:

答案 0 :(得分:1)

myMethod()是无效的,如果它返回一个int并且你分配了一个= 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

答案 1 :(得分:0)

为什么”a“不会改变?

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

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

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