オブジェクトと参照

2710 ワード

http://www.cnblogs.com/dolphin0520/
 Javaでのオブジェクトとオブジェクト参照の概要
Javaでは、「オブジェクトとオブジェクトの引用」という名詞のセットがよく登場します.多くの友达はJavaを初めて勉強するとき、この2つの概念を混同している可能性があります.同じことだと思っていますが、実際にはそうではありません.今日は、オブジェクトとオブジェクトリファレンスの違いと関連について説明します.
1.対象とは?
Javaで流行している言葉に「万物すべての対象」というのがJava言語設計の最初のコンセプトの一つです.オブジェクトとは何かを理解するには、クラスと結びつけて理解する必要があります.次の言葉は「Javaプログラミング思想」の原話から引用されています.
「一般的には、各オブジェクトはクラスのインスタンスであり、ここで、クラスはタイプの同義語である」
この一言から対象の本質を理解することができ、簡単に言えば、それはクラスの実例であり、例えばすべての人を総称して「人類」と呼び、ここの「人類」はクラス(種の一種)であり、具体的には張三という人は対象であり、「人類」の実例である.
2.オブジェクト参照とは?
まず話を見てみましょう.
「各プログラミング言語には独自のデータ処理方法があります.プログラマは、処理するデータのタイプに注意する必要があります.要素を直接操作するか、特殊な構文に基づく間接的な表現(C/C++のポインタなど)を使用するかオブジェクトを操作します.これらはすべてJavaで簡略化され、すべてがオブジェクトと見なされます.そのため、統一された構文を採用することができます.すべてをオブジェクトと見なしますが、操作された識別子は実際にはオブジェクトを指す「参照」(reference)です.
この話は「Javaプログラミング思想」から来ており、明らかに、この話から対象と対象の引用は同じではなく、2つの全く異なる概念であることがわかる.たとえば、次の行のコードを使用してオブジェクトを作成します.
1 Person person =  new   Person( " " );
ここのpersonはオブジェクトであり、Personクラスのインスタンスだと言う人もいます.
ここのpersonは本物のオブジェクトではなく、作成したオブジェクトへの参照だと言う人もいます.
いったいどんな言い方が正しいのですか.どの説が正しいのか急いで悩まないで、2行のコードを見てみましょう.
1
2 Person person; person =  new   Person( " " );
この2行のコードが実現する機能は、上の1行のコードと全く同じです.Javaではnewがスタック上でオブジェクトを作成するために使われていることはよく知られていますが、personがオブジェクトであれば、2行目はなぜnewでオブジェクトを作成するのでしょうか.このように、personは作成されたオブジェクトではなく、何ですか?上の段落では、「操作された識別子は実際にはオブジェクトを指す参照である」、すなわちpersonはPersonクラスを指すことができるオブジェクトを指す参照であることが明らかになった.本当にオブジェクトを作成する文は右側のnew Person(「張三」)です.
もう1つの例を見てみましょう.
1
2
3 Person person; person =  new   Person( " " ); person =  new   Person( " " );
ここでpersonはまず「張三」というオブジェクトを指し、それから「李四」というオブジェクトを指した.つまり、Person person、この言葉はPersonクラスの参照を宣言しただけで、任意のPersonクラスのインスタンスを指すことができます.この理屈は次のコードと同じです.
1
2
3 int   a; a= 2 ; a= 3 ;
ここではまずintタイプの変数aを宣言し,まずaに2を付与し,その後3を付与する.すなわちintタイプの変数aは,その値を2,3とすることができ,合法的なintタイプの数値であればよい.
すなわち、1つの参照は複数のオブジェクトを指すことができ、1つのオブジェクトは複数の参照で指すことができますか?答えはもちろんいいです.
例:
1
2 Person person1 =  new   Person( " " ); Person person2 = person1;
person 1もperson 2も「張三」という対象を指している.
オブジェクトとオブジェクトの引用の違いと連絡についてはしばらくこのように多く話して、興味のある友达は関連ドキュメントと資料を調べることができます.