通过阅读Oracle iLearning Java课程,我给人的印象是,使用“链式if构造”等同于使用“ &&”运算符。所以:
if((5 < 10) && (5 < 6)) {
run some code;
}
与以下相同:
if(5 < 10) {
if(5 < 6) {
run some code;
}
}
将两者进行比较,我很难相信。我觉得我很误会。
答案 0 :(得分:5)
我们可以将此代码重写为:
if(someCondition)` {
if(otherCondition) {
//code
}
}
因此someCondition
和otherCondition
都必须为true,才能运行//code
。 (关键字AND)。因此,在这种情况下,if(someCondition && otherCondition)
等同于上面的代码
通常,您使用嵌套if
的原因是要检查多个条件,例如:
if(someCondition) {
if(otherCondition1) {
//code
}
else if(otherCondition2) {
//code
} else {
//else
}
}
答案 1 :(得分:0)
如果您不了解幕后发生的事情,JDK会提供一个非常强大的工具,称为 javac 。只需编译这两个类并比较它的字节码(这次我为您做了)。所以第一个
public class YouCantAvoidNullPointerLikeThat {
public static void main(String[] args) {
if((5 < 10) && (5 < 6)) {
//run some code;
}
}
}
为您提供此字节码
javap -c YouCantAvoidNullPointerLikeThat.class
Compiled from "YouCantAvoidNullPointerLikeThat.java"
public class YouCantAvoidNullPointerLikeThat {
public YouCantAvoidNullPointerLikeThat();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: return
}
还有下一个示例:
public class YouCantAvoidNullPointerLikeThat {
public static void main(String[] args) {
if(5 < 10) {
if(5 < 6) {
//run some code;
}
}
}
}
给你像这样的字节码
javap -c YouCantAvoidNullPointerLikeThat.class
Compiled from "YouCantAvoidNullPointerLikeThat.java"
public class YouCantAvoidNullPointerLikeThat {
public YouCantAvoidNullPointerLikeThat();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: return
}
是的,这2个结果相等
答案 2 :(得分:0)
您的示例是等效的:
第一:
if (someCondition && otherCondition) {
//some code
}
第二:
if (someCondition) {
if(otherCondition) {
//some code
}
}
第二个示例称为可折叠的“ if”语句,应将其合并为第一个示例以提高代码的可读性。
答案 3 :(得分:0)
这两种方式相似,但并不相同。让我们考虑一下单独的情况:
在第一种情况下,使用and
运算符,您将:
if(conditionOne && conditionTwo){
//do something if both conditions are true
}
在另一种情况下,您有:
if(conditionOne){
if(conditionTwo){
//do something of both conditions are true
}
//here you know that condition one is true but condition two is false
}
您会注意到,第二种方法将使您有可能直接处理更多案件,而第一种方法无法立即处理。
答案 4 :(得分:0)
显然,每天有5少于6和10,因此在两种情况下都将执行代码,因为可以用
替换条件 if(true)
或将其删除