Java では、クラス A を考えてみると、そのオブジェクトは次のように記述して作成します
A aObj = new A();
aObj は参照変数です。
- この参照変数を印刷すると、それによって参照されるオブジェクトのアドレスが印刷されますか?
- C の場合と同様に、参照変数で「&」演算子を使用してアドレスを出力できますか?
ありがとう!
Java では、クラス A を考えてみると、そのオブジェクトは次のように記述して作成します
A aObj = new A();
aObj は参照変数です。
ありがとう!
オブジェクトのクラスでtoString()メソッドをオーバーライドしていない場合、Object
クラスで定義されているデフォルトの実装が呼び出されます。
クラス Object の toString メソッドは、次の名前で構成される文字列を返します。 オブジェクトがインスタンスであるクラス、アットマーク文字 `@'、および オブジェクトのハッシュ コードの符号なし 16 進数表現。
したがって、実装に依存するため、 Object のhashCode()表現を取得します。これは、そのアドレスである場合とそうでない場合があります。これはJavadocが言っていることhashCode()
です:
合理的に実用的である限り、クラス Object によって定義される hashCode メソッド は、個別のオブジェクトに対して個別の整数を返します。(これは通常、 オブジェクトの内部アドレスを整数に変換することで実装され、 ただし、この実装手法は JavaTM プログラミングでは必要ありません。 言語)。
あなたがするとき
System.out.println(objReference)
toString() 実装が呼び出されます。これをオーバーライドした場合、実装が呼び出されます。それ以外の場合は、デフォルトで Object toString() 実装が呼び出され、そのオブジェクトの hashCode が出力されます。
String Class を見ると、 toString メソッドがオーバーライドされています。
System.out.println(stringObjectReference)
オブジェクト参照は、オブジェクトに含まれる実際の値の代わりに出力されません。
オブジェクトを印刷すると、オブジェクトで toString() が呼び出され、そのオブジェクトに対して toString() がオーバーライドされていない場合は、ClassName@Hexadecimal_Representation_Of_Hash_Code のような文字列が返されます。
クラス Test の場合、出力は次のようになります。
Test@126b249
hashCode は必ずしもメモリ アドレスではなく、実装固有です。