0

このような単純なケースを考えてみましょう:

public static void array()
{
    String myString = "STACKOVERFLOW";
    int [] checkVal = new int[myString.length()];

    for(int i=0; i<myString.length();i++){
        checkVal[i] = (int)myString.charAt(i);
    }

    System.out.println(checkVal[0]);
    System.out.println(checkVal[1]);
    System.out.println(checkVal[2]);
    System.out.println(checkVal[3]);
    System.out.println(checkVal[4]);
    System.out.println(checkVal);
}

これにより、次のように出力されます。

83
84
65
67
75
[I@fc9944

誰かが私にこれを説明してもらえますか? メモリ割り当てではなく、配列から適切な情報を取得するにはどうすればよいですか?

4

3 に答える 3

8

きれいに印刷したい場合は、次のように使用Arrays.toStringします。

System.out.println(Arrays.toString(checkVal);

そうでない場合は、toStringから継承された配列の を出力し、その型とハッシュ コードを含むObjectを生成します。String

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

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

この回答には関連情報もあります。

于 2013-05-19T16:58:30.303 に答える
0

オブジェクトの値を出力しようとすると、そのtoString() メソッドが呼び出されます (Object クラスから継承されます)。クラスがこのメソッドをオーバーライドしない場合、このメソッドのスーパー クラス実装が呼び出されます。オブジェクト クラスの toString メソッドは、オブジェクトのハッシュコードを返します。

表示された出力は、配列オブジェクトのハッシュコードでした。したがって、配列オブジェクトの値を出力するには、それを反復処理してすべての値を出力する必要があります。または、別の解決策として、List や Set (つまり動的配列) などのコレクションを使用して、toString() メソッドが呼び出されたときにその中のすべての値を出力することもできます。

ArrayList のようなコレクションと単純な Array の違いは、List は必要に応じて動的に拡大または縮小できることです(つまり、サイズは可変です)。また、 List でさまざまな操作を実行するための多くのビルド内 API メソッドも提供します。

于 2013-05-19T17:20:19.167 に答える
0

checkVal[4] の後、インデックス [] なしで checkVal を参照します。これはあなたのガベージラインに対応しているようです。すべての値を取得して最終的な System.out に出力しようとしている場合は、配列をループして、数値の間にスペースを入れて値を文字列に追加し続け、その文字列を出力できるようです。

于 2013-05-19T17:02:46.713 に答える