Java 如何从ArrayList添加两个对象<;对象>;?
我最近开始学习Java的Java 如何从ArrayList添加两个对象<;对象>;?,java,object,arraylist,Java,Object,Arraylist,我最近开始学习Java的ArrayList类,并了解了如何使用ArrayList保存不同类类型的元素。然而,这个问题把我弄糊涂了 我回答这个问题的一般思维模式是,我们可以先排除答案A和B,因为编译器会抱怨在两个未强制转换的对象上使用+操作符。但是,当我查看答案C和D时,我觉得它们都可以正常工作,因为它们都将list.get()返回的值强制转换为定义运算符+的类型。这让我选择了答案E,因为我相信C和D都可以在这段代码中工作 然而,正如你所看到的,E是错误的答案。为了使我的困惑更加复杂,我在rep
ArrayList
类,并了解了如何使用ArrayList
保存不同类类型的元素。然而,这个问题把我弄糊涂了
我回答这个问题的一般思维模式是,我们可以先排除答案A和B,因为编译器会抱怨在两个未强制转换的对象上使用+
操作符。但是,当我查看答案C和D时,我觉得它们都可以正常工作,因为它们都将list.get()
返回的值强制转换为定义运算符+
的类型。这让我选择了答案E,因为我相信C和D都可以在这段代码中工作
然而,正如你所看到的,E是错误的答案。为了使我的困惑更加复杂,我在repl.it上测试了这段代码,确认答案选项A和B导致编译错误,而答案选项C和D都将正确的9
值存储到I
中。所以现在,我真的很困惑。我在这里对Object
s有什么规则吗?有人能给我指出正确的方向吗
Object
as类型参数允许集合保存任何类型的java对象ClassCastException
s。它的行为类似于前泛型世界c
和d
中允许使用list.get()
:
list.get(0)
,并将结果强制转换为int
。(由于存储在0
的值的类型是Integer
,因此转换为int
-实际上转换为Integer
,然后取消绑定到int
)list.get(2)
((int)list).get(0))
。不幸的是,由于所使用的类型,这是无效的list.add(1L)
List List=new ArrayList();
列表。添加(1L);
(int)list.get(0)+(int)list.get(0);
int
将导致运行时ClassCastException
(类似于Long的内容不能转换为整数
)int
,它实际上基于引用(对象类型)对对象层次结构进行评估,并发现Integer
和Long
是同级的,没有直接的层次结构,因此抛出ClassCastException
我可以确认c和d都应该工作。看起来测试中出现了错误。这是一个多选答案还是您应该只选择一个选项?“不止一个”是什么意思?当您知道两个数字相加的其他方法时,是否应该选择
e
?如果是,那么e
也是正确的,因为还有其他几种方法可以填补“空白”。我想说,“c”是更正确的答案,因为对int
的转换在整个列表中进行。get()
操作。关键短语是更正确
@biggay这两个语句完全等效,因为撤销限制(
)的优先级高于强制转换。这就是为什么在调用y
之前,如果要将x
强制转换为Whatever
,则需要执行((任意)x).y()method@BigGuy抱歉,方法调用,不是解除引用。来不及编辑我的评论了