2

アイテムのIDとそれに対応する座標を保存したい。このために、座標が int x と int y を含むクラスである TreeMap を使用しています。さて、マップにデータを挿入するために、次のように書くことができます:

treeMapObject.put(5,new BasicRow(30,90));

または、次のように書く必要がありますか?

treeMapObject.put(new Integer(5),new BasicRow(30,90));

マップはオブジェクトを扱うため、2 番目のみが正しいと思います。しかし、問題は、次のコードがあるとします。

treeMapObject.put(new Integer(5),new BasicRow(30,90));
treeMapObject.put(new Integer(5),new BasicRow(45,85));

そのような場合はどうなりますか?

4

3 に答える 3

7

Java コンパイラが「オートボクシング」と呼ばれるものを実行するため、実際には両方のバージョンが正しいです。整数が必要な場所に int を指定すると、java はその int を自動的に Integer オブジェクトにラップします。これはその逆も同様に機能します (Java 5 で導入されました。コンパイルする必要のない古い Java バージョンを使用する場合)。

2 番目の質問: 最初に追加したエントリは上書きされます。

于 2011-06-28T06:53:12.183 に答える
1

Javaは整数値をオブジェクトに自動ボックスInteger化するため、どちらも機能します。

これを明示的に行いたい場合は、次のように記述したほうがよいことに注意してください。

Integer a = Integer.valueOf(5);

それ以外の:

Integer a = new Integer(5);

を使用するvalueOfと、クラスIntegerは新しいオブジェクトの作成を回避できます。内部キャッシュからInteger既存のIntegerオブジェクトが返されます。これは、新しいオブジェクトを作成するよりも効率的です。

于 2011-06-28T07:04:40.840 に答える
0

わずかな違いがありますが、マップの動作には影響しません。どちらの場合も、整数 5 の値を取得しようとすると、マップはその基本行を返します。

違い: 2 行目は常に の新しいインスタンスを作成しますがInteger、最初の行は既存のインスタンスを挿入する場合があります。しかし、マップはIDではなくequalityで比較されるため、実際には問題になりません。最初の行がメモリ消費に(非常に)小さなプラスの影響を与えるだけです。

于 2011-06-28T07:07:47.590 に答える