2016-02-13 5 views
5

にリードを導く1明記せずに、配列の印刷、私は次のコードを使用して配列から整数をプリントアウトしようとした:は、私は私のプロジェクトに取り組んでいたが、ランダムなコードの文字列

Random dice = new Random(); 
int wolfhealth[] = new int[]{dice.nextInt(15)+9}; 
System.out.println(wolfhealth); 

私はすでに

に3行目を変更することで、問題を修正しました

[[email protected] 

:私は誤って、私はこのコード行をプリントアウトし、それにつながる整数の配列からプリントアウトしたかった整数述べることを忘れてしまいました

System.out.println(wolfhealth[0]); 

私の質問は、このコード行は - [[email protected]はどういう意味ですか?配列の一意の識別子またはIDですか?

答えて

7

デフォルトのtoString()の実装は、Objectから出力され、配列オブジェクトの場合は "オーバーライド"されています。

出力タイプとメモリアドレスコード:Javaで

[ I @75b84c92 
▲ ▲ ▲ 
│ │ └─── hash code 
│ └─── of integer 
└─── array 
+0

最後の16進文字列はメモリアドレスではありません。これはハッシュコードです。 – saka1029

+0

ありがとう、私はそれを修正しました。 –

2

配列は、参照先の種類です。これは、スタックメモリ内の参照(アドレス)をヒープ内の他のメモリに実際に格納することを意味します。最初の2つのシンボルは、これがintの配列であることを意味します([I]と後者は、ヒープ空間の一部のアドレスに位置することを意味します(@ 75b84c92)。これがこれを理解するのに役立つことを望みます。 System.out.printlnが呼び出されたときに、たとえば、3つすべてが同じ結果基本的

int[] arr = new int[20]; 

    System.out.println(arr); 
    System.out.println(arr.toString()); 
    System.out.println(String.format("%[email protected]%x", arr.getClass(), arr.hashCode())); 

を出力しますARRあなたはまた、配列を取るArrays.toString(a)

2

を使用して(主にデバッグの目的のために)配列の内容を見ることができますすべてのオブジェクトのtoStriingメソッドが呼び出されるので、arr.toStringを呼び出すと、print arrと同じことが起こります。最後のステートメントは、配列クラスのtoStringの内部で何が行われているかを示すことです。

関連する問題