Java三元运算符

时间:2020-01-09 10:36:55  来源:igfitidea点击:

Java三元运算符的函数类似于简化的Java if语句。三元运算符包含一个条件,该条件的计算结果为" true"或者" false",加上条件为" true"时返回的值和条件为" false"时返回的另一个值。这是一个简单的Java三元运算符示例:

String case = ... // get this string from somewhere, e.g. a parameter or program arg

String name = case.equals("uppercase") ? "JOHN" : "john";

我们将在本Java三元运算符教程的其余部分中剖析该三元运算符示例。

三元运算符条件

上面的语句的三元运算符部分是这一部分:

case.equals("uppercase") ? "JOHN" : "john"

上面的三元运算符表达式的条件部分是这一部分:

case.equals("uppercase")

条件是一个Java表达式,其计算结果为" true"或者" false"。如果case变量等于Java String值uppercase,则上述条件的值为true,否则为false。

条件可以是任何计算为布尔值的Java表达式,就像可以在if语句或者while循环中使用的表达式一样。

三元运算符值

三元运算符的条件部分后跟一个问号()。问号之后是三元运算符可以返回的两个值,并用冒号(`:)分隔。前面显示的三元运算符的值部分是:

"JOHN" : "john";

值部分由两个值组成。如果条件部分(参见上文)评估为" true",则返回第一个值。如果条件部分的评估结果为"假",则返回第二个值。

在上面的示例中,如果case.equals(" uppercase")的计算结果为true,则三元运算符表达式整体返回字符串值JOHN。如果case.equals(" uppercase")的计算结果为false,则三元运算符表达式整体将返回字符串值john。这意味着字符串变量" name"将最终具有值" JOHN"或者" john",具体取决于表达式" case.equals(" uppercase")"是计算为" true"还是" false"。

返回的值可以是任何Java表达式的结果,该表达式返回可以在语句开头分配给变量的值。因为本文顶部的三元运算符示例开头的Java变量的类型为String,所以values部分返回的值必须为String类型。

三元运算符为Null 检查

我们可以在调用对象的方法之前,将Java三元运算符用作null检查的简写。这是一个例子:

String value = object != null ? object.getValue() : null;

这等效于但短于以下代码:

String value = null;
if(object != null) {
    value = object.getValue();
}

如我们所见,这两个代码示例都避免在object引用为null的情况下调用object.getValue(),但是第一个代码示例更短,更优雅。

三元运算符作为最大函数

我们可以使用Java三元运算符实现与Java Math max()函数相同的函数。这是一个使用Java三元运算符实现Math.max()函数的示例:

int val1 = 10;
int val2 = 20;

int max = val1 >= val2 ? val1 : val2;

注意三元运算符条件如何检查" val1"值是否大于或者等于" val2"值。如果是,则三元运算符返回" val1"值。否则返回" val2"值。

三元运算符作为最小函数

Java三元运算符也可以用于实现与Java Math min()函数相同的效果。这是一个使用Java三元运算符实现Math.min()函数的示例:

int val1 = 10;
int val2 = 20;

int max = val1 <= val2 ? val1 : val2;

注意三元运算符条件如何检查" val1"值是否小于或者等于" val2"值。如果是,则三元运算符返回" val1"值。否则返回" val2"值。

三元运算符作为abs函数

Java三元运算符还可用于实现与Java Math abs()函数相同的效果。这是使用Java三元运算符实现Math.abs()函数的示例:

int val1 = 10;

int max = val1 >= 0? val1 : -val1;

注意三元运算符条件如何检查" val1"值是否大于或者等于0。如果是,则三元运算符将返回" val1"值。否则,它返回-val1,它对应于否定负数,从而使其为正数。

链式三元运算符

可以将多个Java三元运算符链接在一起。通过使三元运算符返回的值之一成为另一三元运算符,可以做到这一点。这是Java中的链式三元运算符的示例:

String input = ... // get input parameter String from somewhere.

int value = input == null ? 0 : input.equals("") ? 0 : Integer.parseInt(input);

注意第一个三元运算符条件如何检查输入的String是否为null。如果是这样,第一个三元运算符将立即返回0。如果输入的String不为null,则第一个三元运算符返回第二个三元运算符的值。第二个三元运算符检查输入的String是否等于空的String。如果是,则第二个三元运算符立即返回0。如果输入的String不等于空的String,则第二个三元运算符将返回Integer.parseInt(input)的值。

我们可以根据需要随意链接和嵌套Java三元运算符,只要每个三元运算符返回一个值,并且使用每个三元运算符代替一个值(Java三元运算符是一个表达式,并因此被评估设置为单个值)。

当然,我们可以简化上面的三元运算符示例。不用链接三元运算符,我们可以将返回0的两个条件组合为一个条件,如下所示:

int value = input == null || input.equals("") ? 0 : Integer.parseInt(input);

但是,这仅是可能的,因为值null和空字符串都返回相同的值(0)。无论如何,关键是要向我们展示如何链接Java三元运算符。这就是为什么该示例按原样编写的原因。