java - java中的 vector 只包含对象?

标签 java oop vector

我有这个问题,

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/

相关文章:

java - Android Studio 醉了吗?

java - 如何正确利用 doinBackground() 方法来检索 RSS 项目

Java,嵌套if、if/else语句添加单词

PHP preg_replace_callback() 和 create_function() 与 eval() 不起作用

c++ - QVector 与 Qthreads

Java反射

c++ - 在B类中访问A类的函数f,而f需要访问B的成员变量

c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?

c++ - 运行时 vector <int> STATUS_ACCESS_VIOLATION

Java在不同的类中调用void方法到主类中?