条件表达式中的Java数值提升
在编程中重复使用 if-else 条件,无论我们如何优化代码,这种情况都会发生。因此,考虑到这一因素,引入了条件运算符,使我们编写代码的工作变得更容易,因为它确实具有特定的语法,它会根据该语法检查传递给它的条件。条件运算符? : 使用一个表达式的布尔值来决定应该评估其他两个表达式中的哪一个。让我们有一个例子来习惯它的语法。
插图:
Object obj ;
if (true) {
obj = new Integer(4) ;
} else {
obj = new Float(2.0);
}
因此,使用条件运算符,我们期望表达式的语法如下:
Object obj = true ? new Integer(4) : new Float(2.0));
Note: But the result of running the code gives an unexpected result.
例子:
Java
// Java Program to Demonstrate
// Replacing of Conditional Operator
// with If-else and viceversa
// Importing required classes
import java.io.*;
// Main class
class GFG {
// Main driver method
public static void main (String[] args) {
// Expression 1 (using ?: )
// Automatic promotion in conditional expression
Object o1 = true ? new Integer(4) : new Float(2.0);
// Printing the output using conditional operator
System.out.println(o1);
// Expression 2 (Using if-else)
// No promotion in if else statement
Object o2;
if (true)
o2 = new Integer(4);
else
o2 = new Float(2.0);
// Printing the output using if-else statement
System.out.println(o2);
}
}
输出:
根据Java语言规范第 15.25 节,如果有两种不同的类型作为第 2 和第 3 操作数,则条件运算符将实现数字类型提升。转换规则在 Binary Numeric Promotion 中定义。因此,根据给定的规则,如果任一操作数是 double 类型,则另一个将转换为 double,因此 4 变为 4.0。然而,if/else 构造不执行数字提升,因此按预期运行。