我在理解以下代码时遇到了问题:
public class TestIf {
public static void main(String[] args) {
if (true){
if (false){
System.out.println("true false");
}
else{
System.out.println("true true");
}
}
}
}
当我运行它时,它打印true true。
我不明白为什么这段代码首先被执行:
if(true)
如果这里究竟是什么呢?它不像声明了布尔值,例如
boolean bol = true;
if (bol == true) {
//execute the rest of the code
}
答案 0 :(得分:2)
if(true)
无论if语句总是返回true是什么都是一样的。你想在if语句中做这样的事情的唯一一次是为了快速和肮脏的测试目的。
if(false)
如果评价总是会失败,那么无论如何都是一样的。和之前一样。在if语句中,你永远不会在现实生活中这样做。 你的布尔的例子是完全相同的。但在这种情况下,您正在跳过额外的代码行来使用 name 声明布尔值。使用名称声明变量的唯一原因是您可以稍后重复使用或更改它。在这种情况下,你很容易在if中放置一个布尔值,一旦你离开if语句,它就会永远丢失。
然而,有时这种真/假评估会很有用。例如
Boolean test = true;
while(true)
{
//ask for user input...
if(test) break;
}
while将始终评估为true并将永远循环UNTIL它收到break命令。但是,除了在if中运行方法之外,我不会用if语句知道任何很酷的技巧。
答案 1 :(得分:2)
如果if
内的表达式评估为true
,则会输入if
。
boolean bol = true;
if (bol == true) {
上面发生了什么? bol
是否等于true
?是。因此(bol==true)
相当于仅编写(true)
。
所以上面的代码与
相同if (true) {
现在考虑你的代码。
if (true){ // enters 'if' since value of expression inside 'if' is true
if (false){ // goes to else
System.out.println("true false");
}
else{
System.out.println("true true"); // prints
}
}
答案 2 :(得分:0)
对于if
语句,如:
if (condition)
{
statements1;
}
else
{
statements2;
}
首先评估condition
,如果condition==true
,statements1
将被评估,否则,statements2
将被评估。
回到你的例子:
if (true){
if (false){
System.out.println("true false");
}
else{
System.out.println("true true");
}
}
相当于
if (false){
System.out.println("true false");
}
else{
System.out.println("true true");
}
并进一步等同于
System.out.println("true true");
答案 3 :(得分:0)
在Java中,true和false是常量。
所以以
开头的块if(true)
将始终执行,而以
开头的块if(false)
永远不会被执行
做类似
的事情boolean bol = true;
... // more process here
if (bol) {
//execute the rest of the code
}
是不同的,因为bol变量可以是真或假,取决于先前的处理
答案 4 :(得分:0)
if语句的语法是这样的:
if (expression) {
}
在()
内,您放置了一个可以评估为true
或false
的表达式。如果表达式求值为true
,则if语句将执行if
下的代码块。否则,您的解释器将转到else
语句,这可以执行另一个if
语句,或者只是默认为某个代码块。
在您的示例中,表达式只是true
,因此始终求值为true
,以便if block始终执行。
同样的逻辑适用于false
:false
当然总是评估为false
,因此永远不会执行这些块。