让我们看看这个简单的Java代码:
class A {
public static void main(String[] args) {
if (1 == 1)
if (2 == 2)
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
else
System.out.println("2 != 2");
else
System.out.println("1 != 1");
}
}
正如评论所说,它应该会看到1==1
,然后是2==2
,但是最嵌套的条件2!=2
会失败,因此程序会退出而不会打印任何内容。但情况并非如此,相反它表示2!=2
:
$ javac A.java && java A
2 != 2
为什么?
奇怪的是,它在Python中按预期工作:
>>> if (1 == 1):
... if (2 == 2):
... if (2 != 2):
... print("2 != 2");
... else:
... print("2 != 2");
... else:
... print("1 != 1");
...
>>>
答案 0 :(得分:9)
只需缩进代码并添加大括号即可:
class A {
public static void main(String[] args) {
if (1 == 1) {
if (2 == 2) {
if (2 != 2) {
System.out.println("2 != 2");
} else {
//comes here
System.out.println("2 != 2");
}
} else {
System.out.println("1 != 1");
}
}
}
}
这就是为什么强烈建议您使用Java进行编码时即使有一行if
或for
句子也要使用大括号。
答案 1 :(得分:9)
在Eclipse中使用正确的缩进( Ctrl + Shift + F ),您会看到为什么您的结果似乎是2 != 2
:
class A {
public static void main(String[] args) {
if (1 == 1) // true
if (2 == 2) // true
if (2 != 2) // false
System.out.println("2 != 2");
else
System.out.println("2 != 2"); // is actually 2 == 2, gets executed
else
System.out.println("1 != 1"); // is actually 2 != 2
}
}
你可能有一个空间重要的Python背景。在Java中,它们并不重要,可以放置而不会影响执行。如果您编写if
这样的语句,Java将在内部嵌套而不是缩进(就像HTML标记一样 - 最后是if,first else等等。)
为了防止这种情况,你应该(总是)在Java中使用大括号并在Eclipse中使用自动格式化( Ctrl + Shift + F 正如刚才提到的)。这有助于提高可读性。顺便说一句:如果你不在Java中使用大括号,if
只会影响以下行。然后,每次需要执行多个语句时,都必须添加大括号。因此,大括号也可以提高可扩展性,因为您可以随时添加语句,而不必在以后添加它们。
答案 2 :(得分:5)
Java代码中存在悬空的其他问题。
在Java中,缩进不会影响if
加入的else
语句。它总是最近的。
您可以通过在if和else语句的主体周围使用大括号来解决此问题。您可以通过在if
语句的主体周围使用大括号来避免此问题。
public static void main(String[] args) {
if (1 == 1) {
if (2 == 2) {
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
}
else {
System.out.println("2 != 2");
}
}
else {
System.out.println("1 != 1");
}
}
答案 3 :(得分:0)
在Java中总是使用大括号,不像Python缩进除了可读性之外无关紧要。
答案 4 :(得分:0)
有趣的是,在其他海报中,如果正如其他海报所述,则在其他地方匹配。但是,如果你之前有任何其他陈述,则如下:
if (1 == 1)
if (2 == 2)
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
System.out.println("out of inner if loop !");
else
System.out.println("2 != 2");
else
System.out.println("1 != 1");
那么你的system.out语句与最外面的if语句处于同一级别,你会得到错误的else语句,因为java不能匹配任何if。这就是为什么大括号在java中是如此必要。