2

我尝试了一个代码

double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here

发生的错误如下

二元运算符“+”的错误操作数类型

第一种:双

第二种:对象

我应该怎么做才能在列表中添加 temp 值和 double 值?

我喜欢的编程语言是 Java。

4

3 回答 3

4

您需要使用原始包装类 Double。

List<Double> list=new ArrayList<Double>();
list.add(new Double(1.1));
于 2013-01-26T10:38:50.647 回答
3

在. _ Generic type_ Collections_ List_ArrayListJava 1.5+

当您使用raw typeList 时,该方法List.get(0)将始终为您提供Object类型,您需要进行一些转换才能使其工作。

因此,您可以Double在当前代码中添加强制转换,这绝对是个坏主意。

或者,您应该使用generic如下的 List 版本:-

List<Double> list=new ArrayList<Double>();
list.add(1.1);

注意,值为1.1a double,仍然可以直接添加,无需转换为Double。这是因为Java被调用的特性Auto Boxing

在 Java 中,当您将double值存储在Double引用中时,该double值会自动装箱到Double. 而在相反的情况下,它被称为Unboxing,即 from Doubleto double

这就是为什么,当你这样做时: -

temp+=list.get(0);

的值list.get(0)是类型Double。并且由于您正在执行double原始类型的操作,因此该 vlaue 自动boxeddouble,并执行加法操作。

于 2013-01-26T10:47:31.793 回答
2

当您未定义通用类型时。该列表将返回一个对象。这意味着您需要强制转换它:

temp+=(Double) list.get(0);

虽然直接在列表的声明中定义泛型类型更容易:

List<Double> list=new ArrayList();

附带说明:

您需要使用Double而不是double为此工作。因为double是原始类型Double而是列表可以存储的java对象

于 2013-01-26T10:36:18.290 回答