为什么我的Java拷贝构造函数没有返回填充了值的新对象?
拷贝构造函数初始化失败问题排查
核心原因
你的拷贝构造函数中所有赋值操作都作用在了方法内部创建的局部koetinLList对象上,没有对当前正在构造的实例(this对象)做任何初始化,因此新创建的对象成员变量始终是默认的null值。
具体错误点
- 构造函数的作用是初始化
new关键字创建出来的对象本身,不需要在方法内部额外创建同类型的局部实例。你代码中声明的koetinLList list = new koetinLList();是方法局部变量,方法执行结束后就会被回收,和你要构造的外部对象完全无关。 - 空链表场景下没有做兼容处理,虽然不会触发报错,但逻辑完整性不足。
修正后的拷贝构造函数代码
public koetinLList(koetinLList aList) { if (aList.head != null) { // 直接给当前实例的head成员赋值 this.head = new koetinNode(aList.head); koetinNode newListnode = this.head; koetinNode i = aList.head.next; while (i != null) { newListnode.next = new koetinNode(i); newListnode = newListnode.next; i = i.next; } } // 若传入的aList为空链表,当前实例head默认值为null,符合预期 }
修正后调用koetinLList list = new koetinLList(lines);即可正常完成链表拷贝。
内容的提问来源于stack exchange,提问作者unusualsuspect
相关产品推荐
相关产品推荐

