Object Java概念混淆:对象和基本类型

Object Java概念混淆:对象和基本类型,object,methods,reference,primitive,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

我真的对这个概念感到困惑:

/* 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循环还是WHILE循环?像这样:

int i = 1;
while (i < = 3) {
 System.out.println(i);
 i *= 2;
}
inti=1;
而(i<=3){
系统输出打印LN(i);
i*=2;
}
输出:

一,

二,

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

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 is 3myMethod()为空,如果它返回一个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,为什么a不改变

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

<强>如果你有C++背景<强>,也许这个解释可能有帮助:

  • 当您将基元类型参数传递给方法时-您正在传递 正在复制的变量。您传递的是值,而不是实例
  • 当您将对象作为参数传递时 方法中—您正在传递对该对象的引用,,但更准确地说,:在java中,正在传递引用值的副本。这就像将对象地址的副本传递给方法一样。如果在此方法内修改此对象,则修改将在方法外可见。如果
    =null
    =new Obj
    对其进行修改,则只会影响方法内部的对象
    • 为什么“a”不改变

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

      <强>如果你有C++背景<强>,也许这个解释可能有帮助:

      • 当您将基元类型参数传递给方法时-您正在传递 正在复制的变量。您传递的是值,而不是实例
      • 当您将对象作为参数传递时 方法中—您正在传递对该对象的引用,,但更准确地说,:在java中,正在传递引用值的副本。这就像将对象地址的副本传递给方法一样。如果在此方法内修改此对象,则修改将在方法外可见。如果
        =null
        =new Obj
        对其进行修改,则只会影响方法内部的对象

      很好,我本可以投票支持你,但我不能,因为我的重复率低。很好,我本可以投票支持你,但我不能,因为我的重复率低。