通常在JAVA中,如果IF语句没有大括号,只能满足IF条件时执行的一行,但是如果另一个IF块(内部IF)跟在初始IF之后,则不会触发错误,还有更多的线条。这怎么可能?
实施例
if (true)
if (true)
System.out.println("true");
else
System.out.println("false");
答案 0 :(得分:5)
没有错误,因为它等于
if (true) {
if (true) {
System.out.println("true");
}
else
{
System.out.println("false");
}
}
有效的语法。
但请始终使用{}
否则,很难理解if
块的确切位置。
答案 1 :(得分:2)
那是因为您的外部if
块实际上只包含一个语句。
如果内部if
条件为真,则外if
等同于:
if (true)
System.out.println("true");
如果内部if
条件为false
,则相当于:
if (true)
System.out.println("false");
但是,忽略if-else
周围的花括号或者循环是非常糟糕的主意,特别是使用嵌套块执行此操作可能会变坏。仅仅因为它可以做到,并不意味着你应该这样做。
要了解没有大括号的嵌套if
块如何变得难看,并且经常导致错误,请考虑此代码,您认为输出应该是什么?
boolean b = true;
boolean b2 = false;
if (b)
if (true)
System.out.println("true");
if (b2)
System.out.println("Hello");
else
System.out.println("false");
答案 2 :(得分:2)
通常在JAVA中,如果IF语句没有大括号,只能在IF条件满足时执行一行,
校正。没有大括号的if
语句只能有一个语句在满足条件时执行。 if
的语法类似于
if (<condition>) <statement>; [else <statement>;]
也就是说,如果有else
,则它是if
的一部分。这是一个声明。
没有错误的原因是因为这里没有歧义。 (好吧,不管怎么说都不是编译器。)由于else
是if
的一部分,因此它与最接近的if
一致。所以通过适当的缩进,你有
if (true)
if (true)
System.out.println("true");
else
System.out.println("false");
答案 3 :(得分:0)
将此IF声明视为:
if(true) {
if(true) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
如果第一个IF
是true
它转到下一个语句,那么下一个语句也是IF
和true
因此它在其中执行语句。如果假设它是假的,那么它会在else
中搜索else
结束执行语句。因此,所有语句都被覆盖,并且不会出现错误情况。