代入演算子は、私はそれをすべて理解する前に、頻繁に、多くのプログラミング言語で発見され、「コピー左へ右の値を、」そして、もちろん、定数として残すことができない、例えば、言うことができる= 4が言うことができない4 = Aを。ごく最近読んで、「Javaプログラミングのアイデアを、」この章のオペレータは、いくつかのケースで見つかった「=」結果を利用し、我々は程遠いを(それが理解簡単な単語の前またはと同じだ場合)期待しています。
この偏差の理由の特徴の一つは、オブジェクト指向プログラミングです:Javaはオブジェクトの操作で、多くの場合、オブジェクトの操作を参照するので、理解する前に、「他のオブジェクトへの1つのオブジェクトを割り当てます」実際になりました」参照は、別の場所に1つの場所からコピーされた」、など= B、次いで、及びB元のオブジェクトへのこれらの2つの参照のになりbは、尖ったへのオブジェクト。操作の基本的なタイプは、その後、吸引されたBの内容のコピーをAは、およびBコンテンツのは影響を受けません。次のように簡単な例を示します。
package test;
class Test{
int i;
public Test(int i) {
super();
this.i = i;
}
}
public class Blog {
public static void main(String[] args) {
Test t1 = new Test(5);
Test t2 = new Test(11);
System.out.println("t1:"+t1.i+" t2:"+t2.i);
t1 = t2;
System.out.println("t1:"+t1.i+" t2:"+t2.i);
t1.i = 20;
System.out.println("t1:"+t1.i+" t2:"+t2.i);
}
}
結果は以下の通りであります:
T1:T2 5:11
T1、T2 11 11
T1、T2 20:20
我々は、実行時にことを発見し、T1 = T2をこの操作の後、修正t1はまた変わる!t2の代入演算子があるのでこれがそうであるT1とT2同じオブジェクトに2点を参照してください。一つは、不思議に思うかもしれません:同じオブジェクト参照または二つの別々のああにしてもポイントを、なぜ2が変更されている置くためにポイントを変更しますか?「Javaプログラミングのアイデア」は、所与の説明は、次のとおり、元のt1が点含ま5は、ペアに引用T1割り当てられた場合に、失われる覆われていると、オブジェクトが存在することはもはや参照「ガベージコレクタ」自動クリーンアップ。
この現象は呼ばれ「エイリアス現象」それは、Javaはオブジェクトの基本的な操作となっている方法です。この問題を回避するには、ダイレクトモード操作のフィールドを使用することができます。
t1.i = t2.i;
だから、それは独立したオブジェクトが、「Javaプログラミングのアイデア」を維持できることも言及されています。ドメイン内のオブジェクトを直接操作が簡単に混乱を招く、との良好なオブジェクト指向プログラミングの原則に反します。この点は、私はより具体的な理解を持っていません。
さらに、オブジェクトは、メソッドのエイリアスの問題を作成するために渡します。
package test;
class Test{
int i;
public Test(int i) {
super();
this.i = i;
}
}
public class Blog {
public static void main(String[] args) {
Test t1 = new Test(5);
System.out.println("t1:"+t1.i);
f(t1);
System.out.println("t1:"+t1.i);
}
public static void f(Test y){
y.i = 7;
}
}
この方法は、に表示され、Fだけで、その範囲を生成するテストオブジェクトクラスが、パラメータは、実際に参照によって渡され、方法F実際に影響を受けたF()オブジェクト以外。
要するに、この現象は、トラップのプログラミング注目に値すると考えられています。