java - 括号中的整数无法编译 - 为什么?

标签 java compiler-errors int

我正在初始化两个整数 ab

a 编译良好,但 b 出现错误。

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 
    }
}

请帮助我理解这种行为?

最佳答案

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

当您将 2147483648 包裹在括号内时,它会变成一个表达式,将被评估为 int。但是,2147483648 太大而无法放入 int(太大一倍)。

-2147483648 不会出现问题,因为它是有效的 int 值。

JLS 的相关部分:

  • 添加括号会创建一个“带括号的表达式”(section 15.8.5)
  • 一个整数文字,例如 2147483648,默认被视为一个 int (section 3.10.1)

    An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1).

关于java - 括号中的整数无法编译 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752327/

相关文章:

java - 无法在Idea中构建项目

java - 简单的 Java 整数和长算术

c++ - 验证字符串是否只有数字且只有一定长度

java - Jsoup 删除以 Href 开头的链接 href 属性

compiler-errors - gfortran包含带有子例程的目录

java - 使用 HashMap 的问题

c++ - C++ MSVC dll编译错误,缺少类型说明符和重新定义

java - 如何将数组的元素连接成一个整数

java - 使用 JDL 声明自己的数据类型

neo4j - 在java的neo4j嵌入式数据库中,我应该如何检查两个节点是否相互关联?