コーデしてみた
double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here
発生したエラーは以下の通り
二項演算子 '+' のオペランドの型が正しくありません
最初のタイプ: ダブル
2 番目のタイプ: オブジェクト
リストに temp 値と double 値を追加するにはどうすればよいですか?
私が好むプログラミング言語は Java です。
コーデしてみた
double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here
発生したエラーは以下の通り
二項演算子 '+' のオペランドの型が正しくありません
最初のタイプ: ダブル
2 番目のタイプ: オブジェクト
リストに temp 値と double 値を追加するにはどうすればよいですか?
私が好むプログラミング言語は Java です。
プリミティブ ラッパー クラス Double を使用する必要があります。
List<Double> list=new ArrayList<Double>();
list.add(new Double(1.1));
でプログラミングするときは、 、などの型に常に使用する必要がありGeneric type
ます。Collections
List
ArrayList
Java 1.5+
raw type
リストを使用すると、メソッドList.get(0)
は常に型を提供しますObject
。これを機能させるには、型をキャストする必要があります。
したがって、現在のコードにキャストを追加することもできますがDouble
、これは絶対に悪い考えです。
または、次generic
のバージョンの List を使用する必要があります。
List<Double> list=new ArrayList<Double>();
list.add(1.1);
値1.1
は ですが、double
に変換しなくても直接追加できることに注意してくださいDouble
。これは、という機能によるものJava
ですAuto Boxing
。
Java では、参照にdouble
値を格納すると、値は自動的に にボックス化されます。逆の場合は、つまり from toと呼ばれます。Double
double
Double
Unboxing
Double
double
そのため、次の場合: -
temp+=list.get(0);
の値list.get(0)
はタイプDouble
です。そして、double
プリミティブ型で演算を行っているため、その値は自動的boxed
にdouble
になり、加算演算が行われます。
ジェネリック型を定義しない場合。リストはオブジェクトを返します。つまり、キャストする必要があります。
temp+=(Double) list.get(0);
リストの宣言でジェネリック型を直接定義する方が簡単ですが、次のようになります。
List<Double> list=new ArrayList();
補足:
Double
これを機能させるには、代わりにを使用する必要がありますdouble
。double
はプリミティブ型であるDouble
のに対し、はリストに格納できるJavaオブジェクトであるため