示例:类Calendar
中的day_of_week
字段使用int
。
如果差异太小,那么为什么这些数据类型(short
、int
)会存在呢?
其中一些原因已经指出。例如,“...(几乎)所有对byte,short的操作都会将这些原语提升为int”这一事实。但是,下一个明显的问题是:为什么这些类型被提升为int
?
因此,再深入一层:答案可能仅仅与Java虚拟机指令集有关。正如Java Virtual Machine Specification中的表所总结的那样,所有整型算术操作,如加法、除法和其他操作,只适用于int
类型和long
类型,而不适用于较小的类型。
(旁白:较小的类型(byte
和short
)基本上只用于数组。像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处理器。