包装对象返回值(例如 Integer)是否会导致 Java 中的自动装箱?

2024-02-28

对于这个看似简单的问题,我找不到明确的答案。如果我写一个这样的方法:

public Integer getAnInt() {
  int[] i = {4};
  return i[0];
}

返回值是否自动装箱为 Integer,还是取决于返回值后发生的情况(例如,分配给它的变量是否被声明为 Integer 或 int)?


您在问两个不同的问题,将它们分开很重要。第一个是语言层面的问题:语言如何调节两者之间的差异?int and Integer在这样的背景下return。第二个是(暗示)成本模型问题——将返回Integer导致无用的堆分配。许多开发人员将两者混为一谈。

对于第一个问题,你有一个返回的方法Integer但操作数为return是类型的表达式int。本质上,返回被视为赋值;你正在尝试分配int to Integer。 JLS 5.2 规定在赋值上下文中允许进行装箱转换。所以是的,那个int将成为拳击转换的主题。

但您提出这个问题的事实表明,您不知何故害怕拳击的性能开销,因此是您问题的第二个隐含部分。这就是它变得(a)模糊,(b)可能无关紧要的地方。在运行时,堆分配是否实际发生取决于 (a) int 是否很大(装箱缓存小整数的框)和 (b) 该方法是否内联。如果该方法是内联的,JIT 将看到您正在进行 int -> Integer -> int 并忽略转换。

而且,即使拳击发生了,这真的很重要吗?需要多少亿级拳击操作才能将其显示在您的性能指标上?即使您支付装箱的全部成本,短期临时对象的分配和垃圾收集也非常便宜。

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

包装对象返回值(例如 Integer)是否会导致 Java 中的自动装箱? 的相关文章

随机推荐

  • 每个精灵都有一个 SDL_Surface 和 SDL_Texture 可以吗?

    我正在尝试使用 cpp 在 SDL2 中构建游戏引擎 我有一个名为 实体 的类 其中包含一些运动数据以及一些指向表面和纹理的指针 函数 render 被称为 inmass 以基于 g entities 向量渲染每个精灵 class enti
  • 如何消除 scaladoc 中方法链接的歧义?

    我正在记录一个 Scala 类重载方法 https en wikipedia org wiki Function overloading 在 scaladoc 注释中引用它们时如何区分它们 例如 如果我有 The most importan
  • java中传递接口引用和类引用的区别

    传递接口引用或类引用之间有什么区别 如示例所示 Interface MyInterface void foo public class MyClass implements MyInterface public void foo doJob
  • 在 RESTful 服务中表示“即发即忘”操作的 HTTP 方法

    考虑到 REST 将 HTTP 方法映射到 CRUD 操作相对容易 POST 用于创建 GET 用于读取等 但是 即发即忘 操作又如何呢 哪种 HTTP 方法最能代表 即发即忘 操作 例如触发批处理作业 其中不会向调用方发送任何响应 我会想
  • 如何配置 FlatFileItemWriter 将文件输出到 ByteArrayRecource?

    我遇到的情况是部署服务器不允许应用程序将文件输出到其文件系统 所以我要做的是配置FlatFileItemWriter 将结果文件输出到静态Resource属性 多线程在这里不是问题 我当前的代码是 flatFileItemWriter se
  • Azure Functions 应用程序见解中的自定义属性

    我正在 Azure Application Insights 中监视大量应用程序 在所有这些中 我向事件 跟踪等添加了一些自定义属性 以便我可以在门户中进行过滤 分组 是否可以将相同的自定义属性添加到与 Azure Functions 的内
  • 几秒钟后画布性能下降

    我编写了以下 1000 个边界方块演示来测试 HTML5 画布的功能 一开始运行良好 但几秒钟后 fps 明显下降 我不知道为什么 任何指示将不胜感激 var c document getElementById canvas var con
  • 通过Powershell十六进制编辑二进制文件的方法

    我正在尝试仅使用 PowerShell 从命令行执行二进制十六进制编辑 我已经部分成功地用这个片段执行了十六进制替换 我的问题出现时123456发生多次 因为替换只应该在特定位置进行 Note 该片段需要Convert ByteArrayT
  • 将 Bokeh 更新为 0.5.0,现在可以在一个窗口中绘制所有以前版本的图表

    在更新之前 我会运行脚本并输出 html 文件 窗户上将有我的一处地块 我会对我的脚本进行更改 运行它 输出 html 文件 查看新的绘图 然后我再次安装该库以使用 conda 更新它 我对脚本做了一些更改 再次运行它 输出文件包括我进行一
  • 一张背景图片适用于多个 div

    我想使用 1 个背景图像 1366x768 在多个 div 中使用 但如果我使用 my divs background image url image jpg 我只有每个 div 上图像的左上角 我想使用基于 div 位置的图像部分 我可以
  • 如何使用Slick2.0.1映射postgresql自定义枚举列?

    我就是想不通 我现在使用的是 abstract class DBEnumString extends Enumeration implicit val enumMapper MappedJdbcType base Value String
  • Maven - java.net.BindException:地址已在使用中

    我正在尝试在 Ubuntu 12 04 中运行以下命令 mvn jetty run 并收到以下错误 2013 09 04 13 21 32 843 WARN failed email protected cdn cgi l email pr
  • 基于另一个 Observable 的自定义过滤器的函数反应运算符

    为了好玩和学习 我尝试使用函数反应式编程在我的应用程序中实现撤消系统 我有一个状态更改流 需要将其保存到撤消堆栈中 当用户单击撤消时 我从堆栈中获取一个值并相应地更新应用程序状态 问题是此更新本身也会在状态更改流中生成一个事件 所以我想要的
  • 目前不存在哪些有用的 R 包? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • AVAudioPlayer:音量按钮在某些设备上有效,在其他设备上无效

    我有一个应用程序使用AVAudioPlayer播放一些嵌入的 MP3 文件 音量按钮在我主要用于测试的 3GS 上工作可靠 它们在 4 1 下工作 升级到 4 3 1 后现在可以工作 在我老板运行 4 2 1 的 iPhone 4 上 它们
  • 创建 XML 站点地图生成器 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一个 XML 站点地图生成器 我有一个脚本 如果与其他文件一起放置在您的目录中 它会创建一个站点地图 但我想创建一个可以使用
  • 为r中的每个变量按组汇总表中的数据

    我有一些数据 我想用 R 中的一些汇总值正确格式化 我已经玩过aggregate和其他事情 例如summaryBy 但没有一个产生我想要的结果 这是数据 data lt data frame id c 1 2 3 4 5 6 7 8 9 1
  • android 无法从服务器加载图像

    在这里 我尝试从服务器下载图像 但它总是抛出异常 任何人都可以告诉我为什么会发生这种情况以及正确的方法是什么 public static String getBitmap String url throws IOException Inpu
  • 多个键名,相同的对值

    我正在尝试在 JavaScript 脚本中设置一个对象文字 该脚本具有具有多个名称的键 引用相同的对象值 即我已经尝试过的类似内容 var holidays thanksgiving day thanksgiving t day someV
  • 包装对象返回值(例如 Integer)是否会导致 Java 中的自动装箱?

    对于这个看似简单的问题 我找不到明确的答案 如果我写一个这样的方法 public Integer getAnInt int i 4 return i 0 返回值是否自动装箱为 Integer 还是取决于返回值后发生的情况 例如 分配给它的变