括号中的整数未编译 - 为什么?

2022-09-02 02:16:22

我正在初始化两个整数和.ab

它编译良好,但 存在错误。ab

public class Main_1 {
    public static void main(String[] args) {
        int a = -2147483648; //Working fine
        int b = -(2147483648); //Compilation error: The literal 2147483648 of type int is out of range 
    }
}

请帮助我理解此行为?


答案 1

原因是数据类型在 范围内具有有效值。int[-2147483648, 2147483647]

在括号内换行时,它将成为将计算为 .但是,太大而无法放入(太大一个)。2147483648int2147483648int

不会发生此问题,因为它是一个有效的值。-2147483648int

JLS的相关部分:

  • 添加括号会创建“带括号的表达式”(第 15.8.5 节)
  • 默认情况下,整数文本(如 )被视为 (第 3.10.1 节)2147483648int)

    如果整数文本以 ASCII 字母或 (ell) 为后缀,则该文本的类型为;否则,它是类型(§4.2.1)。longLlint


答案 2

整型值从 到 。OutOfRange 也是如此,因为括号内的值被计算为 .您可以放入括号中的最大值为-21474836482147483647-(2147483648)int

Integer.MAX_VALUE //Which is equals to 2147483647

推荐