2

私が書いているかどうかの私の理解に

Car a3=new Car() 

このステートメントはa3、JVM ヒープ内のすべてのプロパティを使用して、jvm スタック内で名前が付けられたハンドルを作成します。これが正しければ、値による呼び出しがどのように機能するのか疑問に思っています。だから、私がメソッドcheckMethod(Car c)を作成し、checkMethod(a3); 私たちの車が

public class Car{
   int a=0;
   public int getpar(){
       return a;
   }
}

checkMethodアクセスしようとするusing a3.a = 5;ので、その値を変更するa3.a と、呼び出し元のクラスに表示され、jvm がヒープに作成した同じフィールドを指していました。

しかし、呼び出し元のメソッドで実行a3= null;し、呼び出し元のメソッドに戻って checkMethod(a3)このオブジェクトを表示しようとすると、null ではありませんか? オブジェクトのプロパティと比較して動作が異なるのはなぜですか???

4

4 に答える 4

1

Why it behaved differently as compared to property of object that is a?

Java は (純粋) であるためcall by valueです。呼び出し先コンテキスト内でパラメーターの値を操作することはできません。呼び出しコンテキストで常にローカル コピーを取得します。

于 2014-07-02T08:44:53.660 に答える
1
 checkMethod(a3);

Car のオブジェクト インスタンスへの参照である値のコピーを渡します

インサイドメソッド...

a3.a = 5

a3 を使用して、a3 (元の a3 のコピー) で識別される Car のオブジェクト インスタンスを変更します。

a3 = null

参照を null に設定 (コピー)

この場合、メソッドに渡したコピーのみが null を指します。ただし、元の a3 はまだ Car のオブジェクト インスタンスを指しています。

于 2014-07-02T08:54:22.637 に答える
0

全体のトリックはこれです: Javaは参照で渡します:)

于 2014-07-02T08:55:07.470 に答える
0

メソッド呼び出しでは、Java は参照のコピーを渡します。

したがって、a3 を null に設定すると、参照のコピーが null に設定され、他の場所に保存されている他のコピーのみが設定されます。

于 2014-07-02T08:47:09.573 に答える