为什么这个java代码没有抛出异常?

时间:2016-07-02 10:23:09

标签: java list exception raw-types

我正在搞乱列表并得到这个代码(它是主要的一部分):

List l1 = new ArrayList<Object>();
List l2 = new ArrayList<String>();
Object t = "a";
l1.add("a");
l2.add(t);
System.out.println(l1.equals(l2));
System.out.println(l2.get(0));

l2的动态类型是ArrayList(type:String),但我设法为它添加了一个Object。此外,它说清单是平等的。我想也许它会以某种方式将它转换为String,但后来我尝试了:

Object t = 9;

它仍然奏效。很确定它与列表是原始类型有关,但是,我仍然无法理解如何将对象添加到ArrayList(类型:String)。提前谢谢。

3 个答案:

答案 0 :(得分:3)

您将l2声明为原始列表。因此,您可以添加任何类型的元素。

关于l2和l1列表的相等性,arraylist类的equals方法文档说:

  

将指定对象与此列表进行比较以获得相等性。返回   当且仅当指定的对象也是列表时才为true,两个列表都是如此   具有相同的大小,以及两者中所有相应的元素对   列表相等

答案 1 :(得分:-1)

String类是Object类的子类,因此存在对象的继承。

你不应该使用&#34; equals&#34;继承。

更多信息:Why should I not use equals with inheritance?

答案 2 :(得分:-1)

问题是,对象可以通过显式转换(在这种情况下我将其称为拆箱,如在C#中)或者通过C#的Java模拟转换回字符串。 ToString()方法。无论哪种方式,对象都可以成功转换为字符串,因此运行时不会抱怨。

如果t是转换为对象的数字,则要么获得异常,要么获得该数字的字符串表示。

必须重写列表相等性才能调用每个列表中对象的.equals方法。