Java 为什么在计算表达式时字节和短值被提升为int
我想知道,每当计算表达式或处理逐位运算时,Java 为什么在计算表达式时字节和短值被提升为int,java,type-promotion,Java,Type Promotion,我想知道,每当计算表达式或处理逐位运算时,byte和short值被提升为int的原因是什么?,因为Java语言规范这么说。定义用于计算某些运算符的一元数字提升,并说明: 如果操作数是编译时类型byte、short或char,则通过扩大原语转换(§5.1.2)将其提升为int类型的值 关于二进制数字运算符的求值(“binary”表示有两个操作数的运算符,如“+”)表示类似的内容: 如果其中一个操作数的类型为double,则另一个操作数将转换为double 否则,如果其中一个操作数的类型为fl
byte
和short
值被提升为int
的原因是什么?,因为Java语言规范这么说。定义用于计算某些运算符的一元数字提升,并说明:
- 如果操作数是编译时类型byte、short或char,则通过扩大原语转换(§5.1.2)将其提升为int类型的值
- 如果其中一个操作数的类型为double,则另一个操作数将转换为double
- 否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float
- 否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long
- 否则,两个操作数都将转换为int类型
因此,在Java设计中,较小的类型通常被视为二等公民,在不同的步骤中转换为int,因为这简化了一些事情。较小的类型仍然很重要,因为它们在打包时占用的内存较少(例如,在数组中),但它们在计算表达式时没有帮助。如果它们都不是我的问题,那么你是对的-它们不是。但第二个问题的公认答案对你的问题进行了很好的讨论。对我来说,这根本不是我想要的答案。我想在求值谓词期间和/或在按位逻辑期间自动提升类型背后的编译器原因,如果可能的话,比较其他语言所做的。我有点疯狂,这里的人更倾向于反对而不是帮助。a-2代表一个好答案……你不可能总是得到你想要的。但是如果你有时间尝试,你会发现你得到了你需要的。