我正在搞乱列表并得到这个代码(它是主要的一部分):
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)。提前谢谢。
答案 0 :(得分:3)
您将l2声明为原始列表。因此,您可以添加任何类型的元素。
关于l2和l1列表的相等性,arraylist类的equals方法文档说:
将指定对象与此列表进行比较以获得相等性。返回 当且仅当指定的对象也是列表时才为true,两个列表都是如此 具有相同的大小,以及两者中所有相应的元素对 列表相等
答案 1 :(得分:-1)
String类是Object类的子类,因此存在对象的继承。
你不应该使用&#34; equals&#34;继承。
答案 2 :(得分:-1)
问题是,对象可以通过显式转换(在这种情况下我将其称为拆箱,如在C#中)或者通过C#的Java模拟转换回字符串。 ToString()方法。无论哪种方式,对象都可以成功转换为字符串,因此运行时不会抱怨。
如果t是转换为对象的数字,则要么获得异常,要么获得该数字的字符串表示。
必须重写列表相等性才能调用每个列表中对象的.equals方法。