当前位置: 首页 > 知识库问答 >
问题:

为什么Java API使用int而不是short或byte?

闻人修明
2023-03-14

示例:类Calendar中的day_of_week字段使用int

如果差异太小,那么为什么这些数据类型(shortint)会存在呢?

共有1个答案

韦澄邈
2023-03-14

其中一些原因已经指出。例如,“...(几乎)所有对byte,short的操作都会将这些原语提升为int”这一事实。但是,下一个明显的问题是:为什么这些类型被提升为int

因此,再深入一层:答案可能仅仅与Java虚拟机指令集有关。正如Java Virtual Machine Specification中的表所总结的那样,所有整型算术操作,如加法、除法和其他操作,只适用于int类型和long类型,而不适用于较小的类型。

(旁白:较小的类型(byteshort)基本上只用于数组。像new byte[1000]这样的数组需要1000字节,像new int[1000]这样的数组需要4000字节)

当然,现在可以说“...下一个明显的问题是:为什么这些指令只提供给int(和long)?”

上面提到的JVM规范中提到了一个原因:

如果每个类型化指令支持Java虚拟机的所有运行时数据类型,那么指令的数量将超过一个字节所能表示的数量

 类似资料:
  • 我非常熟悉这个框架,从一开始我就喜欢它。 有一件事我还不能完全理解,那就是为什么打字有时会中断。 特别是对于这个问题,,我不确定为什么没有使用,起初我认为可能是int32/int16/float等之间的行为差异。。但(对我来说)这在透明化中是没有意义的。 因此,从lib来看,它需要很好地处理数学问题。 我的问题是关于语义的,为什么决定使用而不是?

  • 我有一个回收站视图,用于显示项目列表。有这个android CardView类由android给出,以显示卡片布局。如果我使用相对布局并将其背景设置为白色,它的工作方式相同。此外,在CardView的情况下,我必须无论如何添加一个儿童布局,基本上包含卡内的所有视图。所以我想知道使用CardView(实际上增加了视图的层次结构)而不是直接使用普通的Layout是否有任何好处。

  • 问题内容: 在Go中,有可能等同于或取决于系统架构的类型。我可以声明一个整数变量而不必担心它的大小: 为什么没有type ,它等于或取决于我的系统的体系结构?我希望我也可以: 问题答案: float已在版本2011/01/20中删除。 您仍然可以使用简短的变量声明: 但正如GO常见问题解答所述: 出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了。 您可以在以下主题中查看

  • 我知道byte不是一个合适的类型,不足以包含read方法的结果。 所以,read方法返回int类型值。 但我认为短类型比int更有效。 它可以包含范围-256~255的值。 为什么read方法返回int而不是short?

  • 问题内容: 我有三个简短的变量。当我将两个加在一起并将结果分配给第三个时,eclipse告诉我需要将其强制转换为short! 但是,当我先进行简单分配,然后进行增量分配时,一切都很好。 为什么是这样 ? 问题答案: JLS(第15.8.2节)说: “将二进制+运算符应用于两个数字类型的操作数时,将执行加法运算,从而得出这些操作数之和。” “对操作数执行二进制数值提升(第 5.6.2节 )。” 这意

  • 基准测试在卡钳库下运行。 测试结果 Int 2.365ns 长2.436 ns 短8.156ns > 为什么short原语明显比int或long慢?我希望int原语类型在32bit VM上是最快的,并且长和短在时间上是相等的,或者短的更快。 Android手机上也是这样吗?众所周知,Android手机通常运行在32bit环境下,现在越来越多的手机开始配备64bit处理器。