3

私は実験していてtoCharArray()、いくつかの奇妙な動作を見つけました。

仮定するprivate static final char[] HEX_CHARS = "0123456789abcdef".toCharArray();

 System.out.println(HEX_CHARS);

  /* prints 0123456789abcdef */

 System.out.println("this is HEX_CHARS "+HEX_CHARS); 
  /* prints [C@19821f */

この背後にある理論的な理由はありますか?

4

4 に答える 4

8

これはprintln、2 つの呼び出しでパラメーター to が異なるためです。

最初のパラメータは で呼び出されchar[]、2 番目のパラメータは文字列で呼び出されます。ここで、HEX_CHARSは への呼び出しで変換され.toString()ます。

charArrayprintln()を受け入れるオーバーライドされたメソッドがあります。

于 2012-06-12T01:43:49.697 に答える
4

最初の行はメソッドを呼び出します

print(char[] s) 

あなたが期待するものを印刷するPrintStreamで。2番目のものはメソッドを呼び出します

print(String s)

文字列を配列の toString 実装と連結しているところは、あなたが得る醜いものです ([C@19821f)。

于 2012-06-12T01:44:58.067 に答える
1

配列はオブジェクトであり、その toString メソッドは戻ります

getClass().getName() + "@" + Integer.toHexString(hashCode())

あなたの場合[C@19821f、 char[] を意味し、@19821fは 16 進数表記のハッシュコードです。

その配列から値を出力する場合は、反復またはArrays.toStringメソッドを使用します。

`System.out.println(Arrays.toString(HEX_CHARS));`
于 2012-06-12T01:44:28.853 に答える
0

奇妙な出力は、char[]型の toString() です。なんらかの奇妙な理由で、Java は、配列型に対して toString() の役に立たないデフォルト実装を持つことを決定しました。Arrays.toString(HEX_STRING)代わりに試してください。

于 2012-06-12T01:41:55.923 に答える