Javaの参照とは正確には何ですか? メモリアドレスですか?Java 参照は逆参照された C++ ポインターと同等ですか?
つまり、次のようになります。
Object o1 = new Object();
Object o2 = new Object();
o1 == o2
上記の比較は、C++ で 2 つのポインターを比較するのと同じですか?
o1 == o2
はい、C / C ++で2つのポインターを比較するのとほぼ同じです。
ただし、Java の参照と C/C++ のポインターには、非常に重要な 2 つの主な違いがあります。
また、「参照」という言葉について簡単に説明します。C++ には、C のポインターと Java の参照の両方とはまったく異なる動作をする参照があります (ただし、C++ について詳細を説明するのに十分な知識はありません)。
これに関する完全な議論については、この関連する質問を参照してください。
Javaの参照とは正確には何ですか?
オブジェクトのインデックスです。ポインターのようなものと考えることができますが、
上記の比較は、C++ で 2 つのポインターを比較するのと同じですか?
はい。
On Compresses Oops により、64 ビット JVM が 32 ビット参照を訴えることができます。
はい、参照は基本的にポインタと同じものです。ちなみに、null 参照でメソッドを呼び出すと、NullPointerException が発生します。
ただし、メモリアドレスである必要はないことに注意してください。特定のオブジェクトは、プログラムの実行中に別の場所に格納でき、同じ参照を維持できます。しかし、Java にはポインター演算が存在しないため、気にする必要はありません。
C++ とは異なり、Java はポインタの直接操作を排除しますが、参照は Java のメモリ アドレスへの「ポインタ」です。Java のオブジェクトは、メソッドに渡されることも、メソッドによって返されることもありません。渡されるのは常に参照です。