Java 在声明和方法中两次调用新关键字

Java 在声明和方法中两次调用新关键字,java,collections,Java,Collections,我正在重新分解代码库。我想知道当一个类似容器的向量在声明和使用它的方法中被实例化两次时,内存中到底发生了什么。代码如下 Vector<String> rows = new Vector<String>(); Vector<String> rows = new Vector<String>(); 向量行=新向量(); 在其使用的方法中 rows = new Vector<String>(); 行=新向量(); 您的代码创建了两个独

我正在重新分解代码库。我想知道当一个类似容器的向量在声明和使用它的方法中被实例化两次时,内存中到底发生了什么。代码如下

Vector<String> rows = new Vector<String>();
Vector<String> rows = new Vector<String>();
向量行=新向量();
在其使用的方法中

rows = new Vector<String>();
行=新向量();

您的代码创建了两个独立的
向量
实例


如果不在这两行之间使用变量,则第一行没有意义。

将分配两个新的
Vector
对象。第二个对象不知道也不关心第一个对象是否已分配。

您最终创建了两个对象,但最后只保留了一个对象

向量行=新向量();

行=新向量();


您可以在声明期间安全地将其设置为
null
,然后仅在第一次使用rows变量时才发出第二行。

这可能比无意义更糟糕,对吗?这不会浪费一些内存吗?是和否。你会分配和浪费内存,但垃圾收集器会在某个时候再次将其清除。@Sentry,但这会迫使GC更快地被调用,因此你会在一天结束时失去速度。@Slaks。。假设我没有在声明中创建实例,并在方法调用中创建实例,每次调用方法时,都会创建向量的新实例,对吗?如果我的功能不需要一个新实例(一个空向量),这将是一个开销,对吗?或者这是因为GC处理旧向量而无关紧要吗?@Cruncher你的观点是?nhgrif的评论询问的是内存,而不是时间。尽管对象A将在重新分配
行后不久消失。它不会永远住在那里,它会被GC捡起。@arshajii:修改图片来描述GC。
rows = new Vector<String>();