三元运算符未知行为



我写了一个小程序,从控制台获取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);
}
}

我在测试过程中遇到的问题如下——当你输入数字时:100000000010000000001

它返回:1.1.1

当它应该回来的时候100000000010000000001000000000000000000

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

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

如果你不喜欢,加括号。

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

最新更新