java - JVM可以交换这两行吗?
问题描述
JVM 是否理解 Method 中的这两行是逻辑相连的,并逐行执行。或者这些线是否有可能被交换和NullPointerException
抛出?
这个问题是关于一个单线程程序。
public void foo(Object object) {
if(object == null) System.out.println("Oops!");
if(object.list == null) System.out.println("Oops!");
}
编辑:
public void foo(Object object) {
if(object == null) return;
if(object.list == null) System.out.println("Oops!");
}
解决方案
多线程与否,JVM永远不会交换那两条线,这至少可以说是非常糟糕的。
话虽如此,您的(原始)代码可能会抛出NPE
:
if(object == null) System.out.println("Oops!");
if(object.list == null) System.out.println("Oops!");
因为在第二个if
对象可以为空。但我猜你只是用方法来证明一个观点。最好是以下内容:
public void foo(Object object) {
....
else if(object == null) System.out.println("Oops!");
else if (object.list == null) System.out.println("Oops!");
}
您当前的示例:
public void foo(Object object) {
if(object == null) return;
if(object.list == null) System.out.println("Oops!");
}
没有同样的问题。
推荐阅读
- python - Azure Functions (Python) blob 输出绑定。当名称只是输入消息的一部分时如何设置名称
- google-analytics - 使用相同的目标网址跟踪目标
- asp.net - 在亚马逊 EC2 中延迟加载内容 Web 应用程序
- c - 在C中将字符串拆分为两个变量
- spring-boot - 使用 Maven 将 springboot 可执行文件部署到 Nexus
- python - 从 np.float64 到 np.uint8 的快速转换(带有缩放和裁剪)
- azure - Azure Maps API 不返回现有地理实体的结果
- oraclereports - 使用 .XLS 模板的 Oracle EBS XML 发布者报告
- php - 限制通过 url 访问存储文件
- c# - Build string method using complex type Entity Framework ASP.NET C#