繁体   English   中英

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

[英]Java Concept Confusion : Objects and Primitive Types

我对这个概念很困惑:

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

    }
}

OUTPUT:

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;
}

OUTPUT:

1

2

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

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

一个是3

为什么“ a”不变?

由于原始a你的内部myMethod是不一样的a ,你在你的有void main 完全将其视为另一个变量,并将其值复制到myMethod 该原语的生命周期在该方法执行的结尾结束。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM