1

私は現在 C から Java に移行しており、文字列に関するいくつかのチュートリアルに従っていました。チュートリアルのある時点で、文字配列から新しい文字列をインスタンス化し、文字列を出力する方法を示しました。フォローしていましたが、文字配列と文字列の両方を出力したかったので、これを試しました:

class Whatever {
    public static void main(String args[]) {
        char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'};
        String hello_str = new String(hello);
        System.out.println(hello + " " + hello_str);
    }
}

私の出力は次のようなものでした:

[C@9304b1 hello.

明らかに、これは Java で文字配列を出力する方法ではありません。しかし、私はゴミを手に入れたのだろうか?文字配列を印刷するとアドレスが得られるとあるサイトで読みましたが、それは私にはアドレスのようには見えません... オンラインでそれについて多くを見つけていません。

それで、私は今何を印刷しましたか?
おまけの質問: Java で文字配列を正しく出力するにはどうすればよいですか?

4

1 に答える 1

8

でもゴミが出ただけなのかな?

いいえ、Object.toString()配列でオーバーライドされないの結果が得られました。

クラスObjectのtoStringメソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュコードの符号なし16進表現で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。

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

つまり、意味があるという点でゴミではありませんが、特に有用な値でもありません。

そしてあなたのボーナスの質問...

Javaで文字配列を正しく印刷するにはどうすればよいですか?

文字列に変換するために呼び出すArrays.toString(char[])...または単に

System.out.println(hello);

代わりに呼び出しprintln(char[])、文字列に変換します。Arrays.toString明らかに文字の配列である文字列を作成することにSystem.out.println(hello)注意してください。System.out.println(new String(hello))

于 2012-12-07T14:10:22.890 に答える