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

2023-11-26

为什么使用Java APIint, when short甚至byte就足够了吗?

示例:DAY_OF_WEEK课堂上的田野Calendar uses int.

如果差异太小,那么为什么这些数据类型(short, int)到底存在吗?


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

更深入一点:答案可能仅仅与 Java 虚拟机指令集有关。正如总结中Java虚拟机规范中的表, all积分算术运算,如加法、除法等,仅适用于类型int和类型long, and not对于较小的类型。

(An aside: The smaller types (byte and short) are basically only intended for arrays. An array like new byte[1000] will take 1000 bytes, and an array like new int[1000] will take 4000 bytes)

当然,现在人们可以说“......显而易见的下一个问题是:WHY这些说明仅适用于int (and long)?".

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

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

此外,Java 虚拟机可以被视为真实处理器的抽象。并推出专用算术逻辑单元对于较小的类型,不值得付出努力:它需要额外的晶体管,但它仍然只能在一个时钟周期内执行一次加法。 JVM设计时的主导架构是32位,正好适合32位int。 (涉及64位的操作long值作为特殊情况实现)。

(Note: The last paragraph is a bit oversimplified, considering possible vectorization etc., but should give the basic idea without diving too deep into processor design topics)


编辑:一个简短的附录,重点关注问题中的示例,但从更一般的意义上来说:人们还可以问存储是否没有好处fields使用较小的类型。例如,人们可能认为可以通过存储来节省内存Calendar.DAY_OF_WEEK as a byte。但在这里,Java 类文件格式发挥了作用:所有类文件中的字段至少占据一个“槽”,其大小为 1int(32 位)。 (“宽”领域,double and long,占用两个槽)。因此明确声明一个字段为short or byte也不会节省任何内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Java API 使用int 而不是short 或byte? 的相关文章

随机推荐

  • 在java中打印对象时会发生什么

    class Data int a 5 class Main public static void main String args int b 5 Data dObj new Data System out println dObj Sys
  • 如何更新.txt文件中的java内容[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 例如我有一个名为file txt其中包含个人信息 身份证 姓名 工资 A123
  • 如何使用 MSAL-ANGULAR 读取角色/权限

    因此 我已经按照 msal Angular 中的说明成功地将 Azure AD 身份验证集成到我的 Angular 站点中 现在我正在寻求定义和利用角色和权限来提供对用户的更精细的控制能做和不能做 据我所知 我可以按照这组说明来定义角色 h
  • MongoDB:注册编解码器 (Java)

    我已经尝试了大约一个小时来注册我为我正在开发的游戏中的一个课程制作的编解码器 该类称为Item 我尝试了这三个地方的代码和建议 https mongodb github io mongo java driver 3 0 bson codec
  • 如何只下载页面的一部分?

    我的网站上有 100 个页面 但我只想下载部分页面而不是所有页面内容 我只想每个页面下载一盒 文件大小为 10 KB 为此 我使用 WebClient 和 htmlagilitypack WebClient Client new WebCl
  • 类名和类列表的区别

    在什么情况下应优先选择以下哪一项 btnElement classList add btn btnElement className btn 使用 classList 您可以添加或删除一个类 而不会影响任何 该元素可能具有其他元素 但是如果
  • 使用索引设置 pandas DataFrame 中特定单元格的值

    我创建了一个 Pandas DataFrame df DataFrame index A B C columns x y 现在 我想为特定单元格分配一个值 例如行C和列x 换句话说 我想执行以下转换 x y x y A NaN NaN A
  • gdb 可以中断隐式类方法吗?

    编译器生成一些类方法 例如复制构造函数 析构函数等 是否可以让 gdb 对这些方法进行中断 例如观察对象被复制或销毁的位置 gdb 可以中断隐式类方法吗 是的 当然可以 gdb break MyClass MyClass const MyC
  • CSS 类名/选择器中哪些字符有效?

    允许使用哪些字符 符号CSS类选择器 我知道以下人物是invalid 但是什么字符valid gt lt 您可以直接在CSS语法 Basically1 a name must begin with an underscore a hyphe
  • 使用 Google iOS SDK 创建多个标记

    我是斯威夫特的新手 我很高兴在谷歌地图上找到两个标记 import UIKit import GoogleMaps class ViewController UIViewController You don t need to modify
  • 有适用于 .NET 的 Relaxer 吗?放松者还活着吗? RelaxNG 可行吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我读到了有关 Relaxer 的内容 它可以将 RNG 编译为 Java 类 B但是网站 http www relaxer org 死了 Q1 放松
  • ExternalInterface.call() 没有获得返回值

    我有一个 Javascript 函数 它返回 div 的innerHTML 我试图从 Actionscript 调用此函数并存储返回值 我知道正在调用 Javascript 函数 因为有一个警报显示返回数据 但是 返回到 Actionscr
  • 我们可以在
  • 内给出
  • 我们可以在 un order list 标签中给出 div 标签吗 它将采用这种格式 li div blablabla div li 是否可以 很多人说列表项内的划分是不正确的 但根据 W3C 验证器的说法 这是完全正确的 不过 你永远不会
  • 位置:相对有什么用?

    今天我在考虑 CSS 定位模式 发现我从来没有使用过position relative除了制作以外的任何事情position absolute处理子元素 我更像是一名 开发人员 而不是 设计师 但这些年来我已经完成了相当多的基于 CSS 的
  • GIT - 如何在所有分支中保持文件通用

    假设我在分支 master 中有一个文件 ChangeLog 我想记录有关此文件中任何分支中的所有更改的信息 比提交消息和其他描述性信息更详细 I git checkout b revA 执行编辑 更新ChangeLog 和git comm
  • TypeScript 中是否有类似于“keyof”的“valueof”?

    我希望能够将对象属性分配给给定键和值作为输入的值 但仍然能够确定值的类型 解释起来有点困难 所以这段代码应该可以揭示问题 type JWT id string token string expire Date const obj JWT i
  • MSSQL:选择在另一个表中出现两次以上的行

    基本上我需要获取在 StaffOnGrade 中出现次数超过 2 次的 CampaignTitles 列表 并列出 Grade 评级高于 2 的 CampaignTitle StaffNo 工作表 CampaignTitle StaffNo
  • 最新 iOS 更新 (12.2) 后,本地存储中的视频无法在 WebView (Xamarin.Forms) 中播放

    我有一个适用于 Android 和 iOS 的现有 Xamarin Forms 应用程序 它在 WebView 中显示本地存储中的一些 HTML 内容 目的是在离线时查看此内容 在最新的 iOS 更新 12 2 后 该 HTML 中的视频停
  • PHP:将curl_exec输出转换为UTF8

    我只想使用 UTF8 问题是我不知道每个网页的字符集 我怎样才能检测到它并转换为UTF8
  • 为什么Java API 使用int 而不是short 或byte?

    为什么使用Java APIint when short甚至byte就足够了吗 示例 DAY OF WEEK课堂上的田野Calendar uses int 如果差异太小 那么为什么这些数据类型 short int 到底存在吗 其中一些原因已经