为什么 null 不是编译时常量?

2023-11-26

所以如果我有一个static final Object CONSTANT = null,出于某种原因,如果我在另一段代码中引用它,例如doSomething(CONSTANT),它不会在编译期间内联到代码中。所以而不是doSomething(null)编译后会是doSomething(CONSTANT).


Your CONSTANT不是编译时常数,因为 JLSsays它不是。唯一可以在常量表达式中使用的类型是原始类型和String.

它的意义在于,一个Object实例(通常)具有语义上重要的对象标识,将其与其他对象区分开来Object实例。该对象标识无法在类文件中进行编码...或者至少,它无法使用当前的类文件格式进行编码。 (如果可以的话,就会有各种各样的其他问题......)

价值null可以(理论上)作为特殊情况处理,只是没有太多意义。具体来说,你不能使用null从语言角度来看,在任何需要(或有利)“编译时间常数”的情况下。例如:

  • 你不能有null as a case表达。
  • Since ==对于引用类型不是常量表达式,您不能将其用于涉及涉及的 Java“条件编译”习惯用法if以常量表达式作为条件。 (此外null == null不是一个有用的条件...)

就内联而言,虽然“常量”不能内联到字节码中(因为 JLS 关于什么是“常量表达式”的规则),但 JIT 编译器的优化器将被允许这样做,并且may实际去做......如果有明显的性能优势。

参考:

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

为什么 null 不是编译时常量? 的相关文章

  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 空手道-需要帮助来断言日期范围的一维数组

    我试图断言一维数组内的值 我尝试过使用 match 但看起来无法断言日期范围 下面是对象数组 2019 04 24T17 41 28 2019 04 24T17 41 27 975 2019 04 24T17 41 27 954 2019
  • 在服务器上使用socket.io和nodejs,并以apache作为反向代理

    我尝试将 Node js 与 Socket IO 结合使用来促进浏览器和客户端之间的消息传递 如下导游 但是 我必须在 Apache 后面设置 Node 反向代理 因此 我使用 example com nodejs 代替 example c
  • Google Appengine 和 rx-Java?

    rxJava 库与 Google Appengine 兼容吗 如果可以的话有什么限制吗 我发现的唯一信息是提到 grepcode 上的 部分支持 http grepcode com snapshot repo1 maven org mave
  • Android RecyclerView 选择第一个 Item

    我正在使用 RecyclerView 来实现 NavigationDrawer 我让点击事件正常工作 但我不知道如何在应用程序启动时选择第一个项目 然后即使未显示抽屉 也可以保持所选项目高亮显示 我所能找到的只是 RecyclerView
  • mysql CREATE VIEW 无法从 mysql_query 工作

    我有一个在 mysql 数据库中创建 VIEW 的代码 该代码在我的本地服务器上运行良好 它可以正常创建和裁剪视图 但在我的在线服务器上它给出了错误 CREATE VIEW command denied to user 对于在线数据库 我在
  • C#:在并行线程中设置 HttpContext.Current 有什么问题吗?

    我正在使用一个依赖于 HttpContext Current 的库 该库是 Facebook C SDK 但我的问题也应该适用于其他场景 我想从并行线程内部使用这个库 但是 HttpContext Current 在并行线程中不可用 因此我
  • Haskell 中 FFI 调用的类型自动转换

    我定义了以下模块来帮助我导出 FFI 函数 LANGUAGE MultiParamTypeClasses FunctionalDependencies TypeSynonymInstances module ExportFFI where
  • 无法制作完整的帧缓冲区对象 8cd6(iOS,以编程方式创建的 OpenGL 视图)

    我在让以编程方式创建的 OpenGL 视图在某些 iOS 版本 设备上运行时遇到问题 这似乎在越狱设备上最常见 但在普通设备上也会发生 似乎只有 v4 1 或 4 2 1 才会失败 我的设备已越狱 这不是我的 当然也不是我选择越狱的 并且装
  • C - 包含依赖项的编译

    我有一些代码想在我没有 root 访问权限的机器上运行 该机器没有运行此代码所需的一些库 有什么方法可以在编译时包含所有依赖项吗 我意识到生成的文件可能非常大 您正在寻找的是静态编译 执行静态编译将所有库包含到可执行文件本身中 因此您不必太
  • 在 Angular 2 中的对象的所有属性中搜索字符串

    如何使用 TS 在 Angular 2 中的对象的所有属性中搜索字符串 我在带有搜索框的表中呈现了一组客户 如果用户键入一个值 我想搜索所有属性值以推送与键入的值匹配的客户 export var CUSTOMER Client id 1 n
  • 在 PdfPCell 中右对齐文本

    我有一个可以生成 PDF 发票的 C 应用程序 此发票中有一个项目和价格表 这是使用生成的PdfPTable and PdfPCells 我希望能够右对齐价格列 但我似乎无法做到 文本总是在单元格中左对齐 这是我创建表的代码 PdfPTab
  • 用经度和纬度计算半径[重复]

    这个问题在这里已经有答案了 我试图确定两个位置 每个位置都有自己的纬度和经度值 彼此之间的距离是否在一定距离内 例如 3 英里半径 我有双值来表示每个位置的纬度和经度 Location 1 Double lattitude1 40 7143
  • Java Math.cos() 方法未按预期返回 0

    在 Windows 7 PC 上使用 Java 不确定这是否重要 并对应该返回 0 如 pi 2 的值调用 Math cos 而不是返回小值 但除非我误解 否则小值是与零相比远大于 1 ulp Math cos Math PI 2 6 12
  • 使用 jQuery 确定 Android 上的长按(长按、轻按按住)

    我已经能够成功播放使用 jQuery 和 HTML 页面在 Android 上实现 touchstart touchmove 和 touchend 事件 现在我想看看确定长按事件的技巧是什么 即点击并按住 3 秒 我似乎还无法弄清楚这一点
  • 如何使用 Backbone.Marionette 处理嵌套的 CompositeView?

    我正在使用 Backbone 进入更大规模的数据结构 并且遇到了通过 CompositeViews 很好地表示数据的情况 也就是说 CollectionView 周围添加了 附加内容 例如标题 按钮等 然而 我在将 CompositeVie
  • 如何创建可以从以编程方式创建的按钮调用的 Segue?

    在 Swift 中 我使用以下方法以编程方式创建了一个按钮 var button UIBarButtonItem title Tableau style Plain target self action tabBarTableauClick
  • 如何使用 JDBC 或 Hibernate 获取当前数据库事务 id?

    我在谷歌上查了一下 但找不到任何相关的东西 基本上 我想掌握长时间运行的事务 现在 我经历information schema INNODB TRX或者看看输出show engine innodb status找到trx id然后打开gen
  • 直接在函数声明上使用 function.prototype.bind

    为什么这是允许的 var f function console log this x bind x 1 为什么这不是或者更好为什么我在这种情况下会出现语法错误 function f console log this x bind x 1 那
  • 通过引用 C++ 中的模板函数传递数组

    下面的代码对我来说效果很好 include
  • 为什么 null 不是编译时常量?

    所以如果我有一个static final Object CONSTANT null 出于某种原因 如果我在另一段代码中引用它 例如doSomething CONSTANT 它不会在编译期间内联到代码中 所以而不是doSomething nu