5

私はchar[]Javaで遊んでいて、次のサンプルコードを使用しています:

char[] str = "Hello World !".toCharArray();
System.out.println(str.toString());
System.out.println(str);

次の出力が得られます。

[C@4367e003
Hello World !

そして、私はそれについていくつか質問があります:

  1. とはどういう[C@4367e003意味ですか? メモリアドレスですか?数字の意味は何ですか? とはどういう意味[C@ですか?

  2. オブジェクトを呼び出すと、このオブジェクトの toString メソッドが呼び出されるといつも思っていprintln()ましたが、そうではないようです。

ありがとう !!

4

5 に答える 5

8
  1. [Cは、文字配列であることを意味し ([配列を意味します;Cを意味しますchar)、@4367e003メモリ アドレス[1] 4367e003にあることを意味します。その文字配列を表す文字列が必要な場合は、 を試してくださいnew String(str)

  2. println過負荷です。println文字配列を受け入れるもあります。Stringプリミティブ 、 、またはを渡さない場合、には別のオーバーロードがあるため、オブジェクトがchar[]呼び出されます。これは、文字配列を取る特定のメソッドのドキュメントです。toStringSystem.out.println(Object)

    println(ドキュメントから直接)のオーバーロードは次のとおりです。

    void println()
    void println(boolean x)
    void println(char x)
    void println(char[] x)
    void println(double x)
    void println(float x)
    void println(int x)
    void println(long x)
    void println(Object x)
    void println(String x)
    

    オーバーロードの詳細については、このチュートリアルの最後を参照してください。


[1]: 技術的には、実際にはオブジェクトのハッシュ コードの 16 進数表現ですが、これは通常、メモリ アドレスを使用して実装されます。必ずしも実際のメモリ アドレスとは限らないことに注意してください。に収まらない場合もありintます。詳細については、この質問を参照してください。

于 2013-09-04T23:04:55.287 に答える
3

オブジェクトを呼び出しtoString()ています。toString()オブジェクトは、からObjectのメソッドをオーバーライドしない配列です。オブジェクトの実装:

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

char ( )の[C平均配列 ( )。詳細については、Javadocsを参照してください。[CClass#getName()

オブジェクトのハッシュ コード4367e003で、メモリ アドレスである可能性があります。

合理的に実用的である限り、クラス Object によって定義された hashCode メソッドは、個別のオブジェクトに対して個別の整数を返します。(これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されますが、この実装手法は JavaTM プログラミング言語では必要ありません。)

を呼び出さない場合toString()、実際には、文字を出力する方法を知っている を受け取るprintlnメソッドを呼び出しています。char[]

于 2013-09-04T23:05:11.220 に答える
1

文字列として出力されるのは、配列への参照です。あなたが欲しいのはですArrays.toString(str)Arraysクラスをインポートすることを忘れないでください。

于 2013-09-04T23:05:04.460 に答える