JavaのtoString()メソッドを使用して、文字配列を文字列オブジェクトに変換したい。以下は、私が使用したテストコードのスニペットです。
import Java.util.Arrays;
class toString{
public static void main(String[] args){
char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
System.out.println(Array.toString());
}
}
原則としてabcdefを出力する必要がありますが、毎回[C @ 6e1408または[C @ e53108のようなものをランダムに意味不明に出力します。プログラムが実行されます。私はこれの代わりを必要としませんが、なぜこれが起こっているのか知りたいです。
人間が読めるtoString()
を取得するには、次のように Arrays.toString()
を使用する必要があります。
_System.out.println(Arrays.toString(Array));
_
Javaの配列のtoString()
は_[
_を出力し、その後に配列の要素のタイプを表す文字が続きます(この場合、C
はchar
)、次に_@
_が続き、次に配列の「IDハッシュコード」(「メモリアドレス」のように考える)。
この悲しい状況は、一般的にJavaの「間違い」と見なされています。
他の「間違い」のリストは この答え を参照してください。
「原則として」それが「abcdef」を出力するべきだという考えをどこで得たのかわかりません。それはどこに文書化されていますか?
_[C@6e1408
_のようなものは確かにではないランダムな意味不明なものです-これは、オブジェクトから文字列を構築する他のタイプと同じ方法ですオーバーライドtoString()
は継承-型の表現(_[
_は配列を示し、C
はchar
プリミティブ型を示します)の後にIDハッシュコードが続きますhex。詳細は Object.toString()
のドキュメントを参照してください。偶然にも、配列はtoString
をオーバーライドしません。
_[a, b, c, d, e, f]
_が必要な場合は、 Arrays.toString(char[])
を使用できます。 abcdef
が必要な場合は、new String(char[])
を使用できます。
次のコマンドを使用して、abcdef配列を出力します
String a= new String(Array);
System.out.println(a);
そこで問題が解決しました!!今なぜ他の物を印刷するのかに関して私は上記のそれらの人がそのためのいくつかの便利なリンクを置いていると思います。 Ok行かなければならない!!
Char配列はプリミティブの配列であり、toString()はデフォルト(オブジェクトのハッシュ)を提供するためです。いくつかのクラスはtoString()を実装してよりクールなことを行いますが、プリミティブは実装しません。
配列はtoString
をオーバーライドしません。静的メソッドがあります:Java.util.Arrays.toString
これで問題が解決するはずです。
import Java.util.Arrays;
class toString {
public static void main(String[] args){
char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
System.out.println(Arrays.toString(Array));
}
}
Char []クラスのtoStringメソッドのデフォルト実装は、配列のベースアドレスのString表現を返します。これは、ここに出力されているものです。 char []のクラスは拡張できないため、変更することはできません。
char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(Array);
abcdef
と表示されます。
「Array.toString()」から「Arrays.toString(Array)」へのスペルミスがあると思います。そして、name.toString()を書く代わりに、名前を引数として渡し、上記のように書き込みます。