这两个陈述之间究竟有什么区别?

时间:2014-09-07 01:10:48

标签: java memory

我是java的初学者,我正在阅读这段代码

    ListNode current = new ListNode();
    current = front;

    ListNode current = front;

不是两组语句都创建了一个新对象,还是只为第一个文件保留了内存,而第二个只有一个vatriable被声明为保存前端节点的内存?

2 个答案:

答案 0 :(得分:3)

ListNode current = new ListNode();
current = front;

这会创建一个新的ListNode并将其分配给current。然后它立即覆盖该引用,丢失对新对象的引用。这几乎肯定是一个错误。代码等同于

new ListNode();
ListNode current = front;

如果ListNode()构造函数没有副作用,那第一个语句就没用了,可能只是

ListNode current = front;

答案 1 :(得分:1)

第一个语句实际上创建了一个新对象(因为current指向下一条指令中的另一个对象,它将很快被垃圾收集),而第二个只创建对现有对象的引用。

推荐的代码是第二个,因为在第一个中创建的ListNode从未使用过,因此实例化它是没用的。