Java if语句

时间:2020-01-09 10:35:45  来源:igfitidea点击:

Javaif语句使Java程序可以根据变量的状态或者方法返回的值来决定执行什么代码。这是一个简单的Javaif示例:

boolean isValid = true;

if ( isValid ) {
    System.out.println("it is valid");
} else {
    System.out.println("it is not valid");
}

本例中的if语句测试布尔变量isValid,并根据其值(true或者false)执行两个不同代码块之一。如果" isValid"变量的值为" true",则执行第一个块。如果不是,则执行" else"块内的代码。

括号内的表达式称为条件。条件可以是任何Java表达式,只要表达式的结果是"布尔"结果(" true"或者" false")即可。

在上面的示例中,条件是isValid变量是true还是false。

如果要执行的代码块只是一个语句,则不需要在if语句中的括号" {}"。这是一个例子:

if ( isValid )   System.out.println("it is valid");
else             System.out.println("it is not valid");

但是,即使只执行一条语句,也要在语句两边加上括号,这是一种好习惯。通常,在开发过程中,我们可能会从需要在if或者else块内执行的单个语句开始,但是后来必须向这些块添加更多语句。这可能导致难以发现的错误。看一下这个if语句:

if( isValid)
    System.out.println("it is valid");

现在想象一下,如果isValid为true,我必须增加一个有效的计数器。天真的,我可能会将代码更改为此:

if( isValid)
    validCount++;
    System.out.println("it is valid");

但是现在只有" validCount ++"语句属于" if"语句。 System.out.println()语句将始终执行。或者,假设我是否切换了这样的语句:

if( isValid)
    System.out.println("it is valid");
    validCount++;

现在只有System.out.println()语句属于if语句。 validCount ++语句将始终被执行。

为了避免此错误,即使在该块中只有一条语句要执行,我几乎总是将括号放在要执行的块周围。看起来是这样的:

if ( isValid ) { System.out.println("it is valid");  }
else           { System.out.println("it is not valid"); }

当方括号放在那里时,更容易记住在方括号内插入新语句。

条件运算符

Java有一组可以使用的条件运算符,它们的值可以为true或者false。这些是:

  • ==
  • !=
  • <
  • <=
  • >
  • > =

" =="运算符测试两个值是否相等。例如:

long var1 = 2;
long var2 = 5;

if(var1 == var2) {
   //...
}

如果两个变量var1和var2相等,则表达式var1 == var2被评估为true。否则,表达式的计算结果为" false"。

!=运算符与==运算符完全相反。如果两个变量不相等,则表达式的计算结果为" true"。如果两个变量相等,则表达式的计算结果为" false"。

如果运算符左侧的变量小于运算符右侧的变量,则将<<运算符评估为" true"。如果left变量等于或者更大,则表达式的计算结果为" false"。这是一个示例表达式:

if(var1 < var2) {
   //...
}

&lt;=运算符的工作方式与&lt;运算符相同,不同之处在于,如果两个变量彼此相等,则它的运算结果为true,否则为false。

>运算符与&lt;运算符完全相反。如果运算符左侧的变量大于运算符右侧的变量,则将运算符表达式评估为" true",否则为" false"。这是一个简单的示例:

if(var1 > var2) {
   //...
}

> =运算符的工作方式类似于>运算符,不同之处在于,如果两个变量彼此相等,则其运算结果也为" true"。

比较变量和常量

在本文前面的示例中,我仅显示了常量与常量或者变量与变量的比较。但是,我们也可以将常量与变量进行比较。这是两个示例:

int var1 = 50;

if(var1 > 10) {
   //...
}

if(99 <= var1) {
   //...
}

方法作为条件

我们也可以在if语句中使用方法的返回值作为条件。方法如下:

public void methodOne (String input) {

    if ( isValid(input) ) {
        System.out.println(input + " is valid");
    } else {
        System.out.println(input + " is not valid");
    }

}

public boolean isValid(String value) {
    if( value.equals("123") ) {
        return true;
    }
    return false;
}

这个例子实际上包含两个带有条件作为条件的if语句。首先

if( isValid(input) )

它测试isValid(input)方法的输出是否为true或者false。

其次,在isValid()方法内部,使用String.equals()方法来测试与某个字符串值的相等性。这是测试它的if语句:

if( value.equals("123") ) {

实际上,isValid()方法可以用更短的方式编写。方法如下:

public boolean isValid(String value) {
    return value.equals("123");
}

现在,isValid()方法返回由value.equals()方法调用返回的值。

我们还可以在语句中切换字符串" 123"和" value"变量,如下所示:

public boolean isValid(String value) {
    return "123".equals(value);
}

这个版本实际上具有优势,如果valuenull(不指向String对象,而是指向空对象),则该版本不会导致NullPointerException

链接if语句

可以链接if语句来创建决策树。这是一个例子:

if( name.equals("john")) {
    //...
} else if ( name.equals("jane")) {
    //...
} else if ( name.equals("Linda")) {
    //...
} else {
    //...
}

在上面的示例中," else if"语句被一个接一个地链接。实际上,这个链接的if语句只是在else块中执行的if语句,没有方括号{},正如我在本文开头向我们展示的那样。上面的代码实际上等效于此:

if( name.equals("john")) {
    //...
} else {
    if ( name.equals("jane")) {
        //...
    } else {
        if ( name.equals("Linda")) {
            //...
        } else {
            //...
        }
    }
}

如我们所见,第一个版本实际上更易于阅读。这是我通常必须始终将" if"和" else"的语句嵌入方括号中的规则的一个例外。在这种情况下,我更喜欢第一个版本。它更易于读取,写入,并且通常不会导致编程错误。