我尝试了一个代码
double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here
发生的错误如下
二元运算符“+”的错误操作数类型
第一种:双
第二种:对象
我应该怎么做才能在列表中添加 temp 值和 double 值?
我喜欢的编程语言是 Java。
我尝试了一个代码
double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here
发生的错误如下
二元运算符“+”的错误操作数类型
第一种:双
第二种:对象
我应该怎么做才能在列表中添加 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 时,该方法List.get(0)
将始终为您提供Object
类型,您需要进行一些转换才能使其工作。
因此,您可以Double
在当前代码中添加强制转换,这绝对是个坏主意。
或者,您应该使用generic
如下的 List 版本:-
List<Double> list=new ArrayList<Double>();
list.add(1.1);
注意,值为1.1
a double
,仍然可以直接添加,无需转换为Double
。这是因为Java
被调用的特性Auto Boxing
。
在 Java 中,当您将double
值存储在Double
引用中时,该double
值会自动装箱到Double
. 而在相反的情况下,它被称为Unboxing
,即 from Double
to double
。
这就是为什么,当你这样做时: -
temp+=list.get(0);
的值list.get(0)
是类型Double
。并且由于您正在执行double
原始类型的操作,因此该 vlaue 自动boxed
为double
,并执行加法操作。
当您未定义通用类型时。该列表将返回一个对象。这意味着您需要强制转换它:
temp+=(Double) list.get(0);
虽然直接在列表的声明中定义泛型类型更容易:
List<Double> list=new ArrayList();
附带说明:
您需要使用Double
而不是double
为此工作。因为double
是原始类型Double
而是列表可以存储的java对象