27

ここに問題があります。このコード:

String a = "0000";
 System.out.println(a);
char[] b = a.toCharArray();
 System.out.println(b);

戻り値

0000
0000


しかし、このコード:

String a = "0000";
 System.out.println("String a: " + a);
char[] b = a.toCharArray();
 System.out.println("char[] b: " + b);

戻り値

文字列a:0000
char [] b:[C @ 56e5b723


世界で何が起こっているのですか?十分に単純な解決策があるはずですが、私はそれを理解できないようです。

4

5 に答える 5

31

あなたが言う時

System.out.println(b);

その結果、print(char[] s)thenが呼び出されますprintln()

JavaDoc にprint(char[] s)は次のように書かれています。

文字の配列を出力します。文字は、プラットフォームのデフォルトの文字エンコーディングに従ってバイトに変換され、これらのバイトは write(int) メソッドとまったく同じ方法で書き込まれます。

そのため、バイトごとの出力を実行します。

あなたが言う時

System.out.println("char[] b: " + b);

への呼び出しにprint(String)なるため、実際に行っているのは、で呼び出すStringanに追加することです -- これは、デフォルトですべての場合と同様に、 an の場合は、参照の値を出力します (メモリ住所)。ObjecttoString()ObjectObjectArray

あなたがすることができます:

System.out.println("char[] b: " + new String(b));

これは、エンコーディングを気にせず、システムのデフォルトを使用しているという意味で「間違っている」ことに注意してください。エンコーディングについては、遅かれ早かれ学びましょう。

于 2012-11-22T03:01:32.207 に答える
5

使用する

System.out.println("char[] b: " + Arrays.toString(b));

あなたが得る意味不明な点は、オブジェクトのメモリアドレスが続くクラス名です。b に文字列を追加しようとすると問題が発生しますchar[] b:。この場合、char 配列 b.toString() メソッドが呼び出され、[C@56e5b723 が表示されます。

[ は配列であることを示します C はこの場合のクラスを示します char @56e5b723 はメモリ位置を示します

于 2012-11-22T02:58:30.133 に答える
5
System.out.println("char[] b: " + b);

これはまるで

System.out.println(("char[] b: " + b.toString());

「Object.toString()」を検索できます

于 2012-11-22T03:02:46.717 に答える
4

配列のtoString()メソッド (実行時に呼び出されるもの"..." + b) は、デバッグ出力を提供することのみを目的としています。char[]が元のtoString()文字列を与える特別なケースはありません- すべての型の配列は同じtoString()実装を持っています。

char 配列から元の文字列を取得する場合は、次を使用します。

String a2 = new String(b);
于 2012-11-22T03:02:14.560 に答える
2

3:e列を使おう!

Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);
于 2016-04-26T06:56:38.437 に答える