三元运算符未知行为

时间:2018-07-10 09:25:41

标签: java java-8

我编写了一个小程序,该程序从控制台获取3个数字并计算平方的类型。

import java.util.Scanner;

public class TheatreSquare {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int m = scanner.nextInt();
    int a = scanner.nextInt();

    long i = n / a + n % a != 0 ? 1 : 0;
    long j = m / a + m % a != 0 ? 1 : 0;

    System.out.println(i);
    System.out.println(j);
    System.out.println((long)i*j);
}
}

我在测试过程中遇到的问题如下-输入数字时: 1000000000 1000000000 1

它返回: 1个 1个 1

它应该返回时 1000000000 1000000000 1000000000000000000

如果用括号覆盖两个三元运算符,则结果将是正确的。但是它如何影响呢?据我所知执行顺序应该相同,这里没有溢出。那么为什么它如此工作?

1 个答案:

答案 0 :(得分:2)

检查运算符优先级顺序表here:三元运算符出现在(in)等式运算符或算术运算符之后,位于最后一位,因此如果没有括号,您将要评估n / a + n % a != 0首先,然后求值result ? 1 : 0,然后将其分配给您的变量。

如果这不符合您的口味,请添加括号。

即使这就是您想要的,添加括号也会大大提高可读性。