我有这个问题,
java 中的 vector 只接受对象吗?但是这段代码编译得很好
Vector myv=new Vector();
myv.addElement(1);
myv.addElement(1);
是否封装为Integer的对象?如果是,为什么要这样声明
System.out.println(myv.elementAt(0)==myv.elementAt(1));
给出真值?!!!它们应该是两个不同的对象...?
同时这条语句会抛出一个错误,从而确保该元素是一个对象。
int x=myv.elementAt(0);
谁能帮我解释一下?谢谢。
最佳答案
1
被自动装箱成一个整数。
要了解有关自动装箱和拆箱的更多信息,请参阅 Oracle 文档:https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
为什么它们相同:将整数自动装箱到整数使用缓存。对于小于 128(我认为)的数字,每次都会返回相同的 Integer-Object,而不是创建一个新的。因此,您的代码实质上将同一个对象两次插入到 Vector 中,因此使用 ==
进行身份比较。返回真。
由于您不对 Vector 使用泛型,myv.elementAt(0)
将返回一个对象,该对象不能转换为 int。如果您使用泛型,即 Vector<Integer> myv = new Vector<>()
, 然后 elementAt
将返回一个整数,该整数将自动拆箱为 int
.
关于java - java中的 vector 只包含对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896226/