ここに問題があります。このコード:
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
世界で何が起こっているのですか?十分に簡単な解決策があるはずですが、私はそれを理解できないようです。
あなたが言う時
_System.out.println(b);
_
print(char[] s)
を呼び出し、次にprintln()
を呼び出します。
print(char[] s)
のJavaDocは次のように言います:
文字の配列を出力します。文字はプラットフォームのデフォルトの文字エンコーディングに従ってバイトに変換され、これらのバイトはwrite(int)メソッドとまったく同じ方法で書き込まれます。
そのため、バイト単位の印刷を実行します。
あなたが言う時
_System.out.println("char[] b: " + b);
_
print(String)
の呼び出しになります。したがって、実際に実行しているのは、toString()
を呼び出すString
とObject
Object
-これは、デフォルトですべてのObject
と同様に、Array
の場合、参照の値(メモリアドレス)を出力します。
できること:
_System.out.println("char[] b: " + new String(b));
_
これは「間違っている」ことに注意してください。これは、エンコードを気にせず、システムのデフォルトを使用しているという意味です。エンコードについては、後ほどではなく早く学びましょう。
System.out.println("char[] b: " + b);
これは
System.out.println(("char[] b: " + b.toString());
「Object.toString()」を検索できます
使用する
System.out.println("char[] b: " + Arrays.toString(b));
あなたが得る飾りは、オブジェクトのメモリアドレスが続くクラス名です。 bを文字列char[] b:
で追加しようとすると問題が発生します。この場合、char配列b.toString()メソッドが呼び出されるため、[C @ 56e5b723が出力されます。
[配列であることを示しますCこのクラスの場合、char @ 56e5b723はメモリの場所を示します
配列のtoString()
メソッド(_"..." + b
_を実行するときに呼び出されるメソッド)は、デバッグ出力を提供することのみを目的としています。 _char[]
_のtoString()
が元の文字列を与える特別なケースはありません-すべての型の配列は同じtoString()
実装を持ちます。
Char配列から元の文字列を取得する場合は、次を使用します。
_String a2 = new String(b);
_
3:e行を使用してください!
Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);