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 はプリミティブ型ですが、なぜ更新され、なぜ最初のプログラムで a を int しないのですか?

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内部は、あなたが持っていたものmyMethodと同じではないからです。それを完全に別の変数として扱い、その値が にコピーされたことを確認します。このプリミティブのライフサイクルは、このメソッドの実行の最後で終了します。avoid mainmyMethod

C++ のバックグラウンドがある場合は、次の説明が役立つかもしれません。

  • プリミティブ型の引数をメソッドに渡すと、コピーされる変数が渡されます。インスタンスではなく、値を渡しました。
  • オブジェクトを引数としてメソッドに渡すと、そのオブジェクトへの参照が渡されますが、より正確には、Java では参照値のコピーが渡されます。オブジェクトのアドレスのコピーをメソッドに渡すようなものです。このメソッド内でこのオブジェクトを変更すると、変更はメソッドの外部に表示されます。あなた=nullまたは=new Objそれの場合、それはあなたのメソッド内でのみオブジェクトに影響を与えます。
于 2013-04-08T10:46:50.920 に答える