这 ? (三路)运营商

The ? (three way) Operator

首先,对于以下问题,我很抱歉,我是 java 的新手,我从书中举了一个例子,但它无法完全解释自己。

我一直在阅读有关 ?运算符及其功能,并以下面的例子来学习:

class Ternary {
    public static void main(String args[]) {
        int i, k;
        i = 10;
        k = i < 0 ? -i : i; // get absolute value of i
        System.out.print("Absolute value of ");
        System.out.println(i + " is " + k);

        i = -10
        k = i < 0 ? -i : i; //get absolute value of i
        System.out.print("Absolute value of ");
        System.out.println(i + " is " + k);
    }
}

我明白第一部分是如何给出结果 10 的。 但我无法理解第二部分如何给出 10 的结果?

如果这很明显,我们深表歉意。

负数的负数是正数 0 - (-10) = 10

i 被设置为 -10,然后 k 检查 i < 0,它是。

因此它执行第一种情况:

k = -(-10) = 10

设置k时,我们有条件

i < 0

后跟 ?,询问“我是否小于 0。如果是,它将 return 第一个结果 (-i),如果不是,它将 return第二个结果 (i).

这意味着同样的事情:

if (i < 0){
    k = -i;
else{
    k = i;
}
i = -10
k = i < 0 ? -i : i; 

相同
k = i < 0 ? -(-10) : i;

给你+10

当你写:

k = i < 0 ? -i : i

解释为

if(i < 0){
    k = -i;
} else {
    k = i;
}

所以因为-10 < 0, 给定的表达式returns -(-10), 即10

由于三元运算符在您的以下代码行中计算 i < 0

k = i < 0 ? -i : i; //get absolute value of i

如果为真k = -i

否则为假k = i

正如其他人提到的那样,-(-10) == 10 我相信这是你想要的输出,因为你试图获得一个数字的绝对值,所以如果它是负数,打印出它的正值。

条件运算符用于决定将两个值中的哪一个分配给变量。

它采用以下形式:

类型变量名=(布尔条件)? valueIfTrue : valueIfFalse;

在你的情况下你有:

public static void main(String[] args){
    int i, k;
    i = -10;
    k = i < 0 ? -i : i; //get absolute value of i
    System.out.print("Absolute value of ");
    System.out.println(i + " is " + k);
}

所以,我们说:

i < 0,那么 i 等于 -10,因此小于 0。因此分配了 true 条件,其值为 -i。

因为 -(-10) = -*-10 = 10 [即减乘以减为正],输出为 10。