Sunの Java Tutorial から、このコードがセットを配列に変換すると思っていたでしょう。
import Java.util.*;
public class Blagh {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
String[] array = set.toArray(new String[0]);
System.out.println(set);
System.out.println(array);
}
}
ただし、これは
[a, c, b]
[Ljava.lang.String;@9b49e6
私は何を誤解しましたか?
コードは正常に動作します。
交換:
System.out.println(array);
と:
System.out.println(Arrays.toString(array));
出力:
[b、c、a] [b、c、a]
配列のString
表現は、 Object.toString
-によって取得された配列の「テキスト表現」を表示します。これは、クラス名と配列のハッシュコードです16進文字列として。
完全性チェックのために、- Java.util.Arrays.toString および Java.util.Arrays.deepToString もチェックします。
後者は、ネストされた配列(Object [] []など)を扱うときに特に役立ちます。
大丈夫です。
Printlnはobject.toString()を呼び出して出力用のオブジェクトからバイトを取得するため、System.out.println(array)で配列の内容は表示されません。
HashSetはデフォルトのtoString()実装をオーバーライドするため、System.out.println(set);でセットの内容を確認できます。
配列はデフォルトのtoString()(クラス名と何らかのIDハッシュコードを与える)をオーバーライドしないため、ファジー[Ljava.lang.String; @ 9b49e6
役立つことを願っています
Dfaが述べたように、単に置き換えることができます:
System.out.println(array);
と...
System.out.println(Arrays.toString(array));
あなたは何かを誤解しているとは思わない。コードは動作するはずです。ただし、配列はtoStringメソッドでコンテンツを印刷するほどスマートではないため、次のようにコンテンツを印刷する必要があります。
for(String s : array) println(s);
またはそのようなもの。
正しい結果が得られました。残念ながら、配列のtoString()メソッドは元のObject.toString()のままなので、出力はデフォルトでは多少使用できませんが、すべての配列に適用されます。