【发布时间】:2019-02-07 04:01:38
【问题描述】:
使用q != null和!q.isEmpty()有什么区别?
当我在下面的代码中使用 q!=null 时,它不会被编译。但是 !q.isEmpty() 效果很好。
java
Queue<TreeNode[]> q=new LinkedList<>();
q.add(new TreeNode[]{t1, t2});
while(q!=null){ // is not complied
TreeNode[] t=q.remove();
if(t[0]==null || t[1]==null) continue;
t[0].val+=t[1].val;
if(t[0].left==null) t[0].left=t[1].left;
else q.add(new TreeNode[]{t[0].left, t[1].left});
if(t[0].right==null) t[0].right=t[1].right;
else q.add(new TreeNode[]{t[0].right, t[1].right});
}
【问题讨论】:
-
你给出了什么编译错误?
while (q != null)应该编译(虽然它根本没有意义) -
但您的主要问题似乎是您不了解 Java 的 null 概念——请查看副本以获取有关此信息的信息
-
错误指向行“TreeNode[] t=q.remove();” ,显示 NoSuchElementException
-
您的陈述没有意义,因为您在问题中指出代码无法编译,但在 cmets 中声明它正在引发异常,这意味着代码实际上正在编译并运行但随后抛出异常。恐怕这一切都非常令人困惑。
-
但另一方面,如果您尝试从空集合中删除元素,则会引发异常是有道理的。这与编译问题无关,您最好阅读这两件事之间的区别。