我正在学习JDK8的AbstractQueuedSynchronizer
的源代码,在这里我不知道'null check'的目的:
/**
* Returns previous node, or throws NullPointerException if null.
* Use when predecessor cannot be null. The null check could
* be elided, but is present to help the VM.
*
* @return the predecessor of this node
*/
final Node predecessor() throws NullPointerException {
Node p = prev;
if (p == null)
throw new NullPointerException();
else
return p;
}
这些注释告诉我们可以取消空检查,但是它可以帮助虚拟机-为什么? VM的好处是什么?
答案 0 :(得分:0)
从设计的角度来看,在编写API时,最好将处理未定义行为的责任传递给用户,而不是尝试自己处理它。
在评论中说,您只能在predecessor()
不能为null
的情况下使用null
,因此它会检查以确保它不是 valueField="FundClassId" defaultItem = "FundClassId" (valueChange)="flashClassChanged($event)"></kendo-dropdownlist>
-但如果是,那么行为是不确定的,您应该通知用户。
也许对JVM有一些特定的用途,但是对它有更深入了解的人将不得不与之交谈。