栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在对表达式求值时将byte和short值提升为int

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在对表达式求值时将byte和short值提升为int

因为Java语言规范是这样说的。第5.6.1节定义了用于撤消某些运算符的一元数值提升,并指出:

  • 如果操作数的编译时类型为byte,short或char,则通过扩展基元转换(第5.1.2节)将其提升为int类型的值。

关于二进制数值运算符(“
binary”表示具有两个操作数,如“
+”的运算符)的评估的第5.6.2节说类似的话:

  • 如果一个操作数的类型为double,则另一个将转换为double。
  • 否则,如果其中一个操作数的类型为float,则另一个将转换为float。
  • 否则,如果其中一个操作数的类型为long,则另一个将转换为long。
  • 否则,两个操作数都将转换为int类型。

为什么这样定义?一个主要原因是,在设计Java语言和Java虚拟机时,计算机的标准字长为32位,而使用较小类型的基本算术在性能上没有优势。通过使用32位作为int大小,然后在Java字节码中提供专用指令,Java虚拟机被设计为利用此优势。用于使用整数,长整数,浮点数和双精度数的算术运算,但不适用于任何较小的数字类型(字节,短数和字符)。消除较小的类型将使字节码更简单,并使完整的指令集以及将来的扩展空间仍将操作码放在单个字节中。同样,JVM的设计偏向于在32位系统上轻松实现,在类和堆栈中的数据布局中,其中64位类型(双精度和长整数)占用两个插槽,而所有其他类型(32-位或更少)占用一个插槽。

因此,较小的类型通常在Java设计中被视为二等公民,并在各个步骤将其转换为int,因为这简化了某些事情。较小的类型仍然很重要,因为它们打包在一起时(例如,以数组形式)占用较少的内存,但是在计算表达式时却无济于事。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号