带有条件运算符的奇怪 java 行为。这是一个错误吗?

2023-11-21

您能运行下面的命令并解释一下吗?

Object o = true ? new Integer(1) : new Double(2.0);
System.out.println(o);

我发现这很令人惊讶,因为有人会期望打印 1 而不是 1.0


这一点也不奇怪,尽管它看起来像是一个。该行为在中指定JLS §15.25 - 条件运算符:

否则,如果第二个和第三个操作数的类型是 可转换(§5.1.8)为数值类型,那么有几种情况:

  • 如果其中一个操作数的类型为byte or Byte另一个是 类型short or Short,则条件表达式的类型为short.

    [...]

  • 否则,二进制数字提升(第 5.6.2 节)将应用于操作数 类型,以及条件表达式的类型是提升的类型 第二个和第三个操作数。

Note that binary numeric promotion performs value set conversion (§5.1.13) and may perform unboxing conversion (§5.1.8).

So the Integer and Double类型被拆箱为其各自的原始对应物 -int and double,作为二进制数值提升的过程。然后条件运算符的类型是提升的类型int and double,即double。因此结果是1.0。当然最后的结果会被装回Double.

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

带有条件运算符的奇怪 java 行为。这是一个错误吗? 的相关文章

随机推荐

  • Android M:如何获取当前前台活动包名称(从服务)

    在Android L上很容易从ActivityManager服务中获取正在运行的任务列表 并且首先返回当前活动的任务 但它不再适用于 Android M 返回列表仅包含我的应用程序任务 有什么办法解决吗 My code List
  • 计数汽车 OpenCV + Python 问题

    我已经trying在过线时计算汽车数量 它可以工作 但问题是它对一辆车进行多次计数 这是荒谬的 因为它只应该计算一次 这是我正在使用的代码 import cv2 import numpy as np bgsMOG cv2 Backgroun
  • 为什么 (long)9223372036854665200d 给我 9223372036854665216?

    我知道一些带有精确误差的奇怪东西 但我无法理解 Why is long 9223372036854665200d给我9223372036854665216 9223372036854665200d是类型常量double 然而 9223372
  • Ruby 和 Python 版本的“self”有什么区别?

    我已经完成了一些 Python 但现在才开始使用 Ruby我可以很好地解释这两种语言中 自我 之间的区别 乍一看很明显 Self 不是 Python 中的关键字 但无论你如何称呼它 都有一个 self like 值 Python 方法接收
  • 从 Android 应用程序安装程序和主屏幕启动应用程序时出现活动堆栈排序问题

    仅出于测试目的 我允许通过 URL 下载和安装我的应用程序 APK 一旦下载到手机上 它就可以通过 Android 应用程序安装程序启动 用户可以选择将其安装到设备上然后运行 考虑一下我们是否以上述方式下载并运行应用程序 我的应用程序中的主
  • 如何将 Expander ToggleButton 放在右侧

    默认情况下 扩展器有一个左对齐的切换按钮 但在我的 WPF 应用程序中 我希望切换按钮位于标题的右侧 而不需要 Expression Blend 的帮助 只是简单的 XAML 和 或 C 我的扩展器包含一个垂直方向的堆栈面板 其中标签作为其
  • 我应该如何将 Python 嵌入到 C++ Builder / Delphi 2010 应用程序中?

    我有兴趣尝试在我的应用程序中嵌入 Python 让用户在应用程序环境中运行 Python 脚本 访问内部 C 实现的 对象等 我对此很陌生 所以不知道到底是什么我正在做 我读过了将 Python 嵌入到另一个应用程序中 尽管这似乎只讨论 C
  • 我需要 __closure__

    我刚刚查看了这个非常有趣的思维导图 http www mindmeister com 10510492 python underscore 我想知道一些新的含义是什么 比如 code and closure 我用谷歌搜索了一下 但没有具体的
  • ggplot2 - 在绘图之外进行注释

    我想将样本大小值与绘图上的点相关联 我可以用geom text将数字放置在点附近 但这很混乱 将它们沿着地块的外边缘排列起来会干净得多 例如 我有 df data frame y c cat1 cat2 cat3 x c 12 10 14
  • ASP.NET 黄屏死机 (YSOD) 可以按需生成或捕获吗?

    例如 我们只想从 Global asax 错误处理程序捕获 YSOD 输出以在错误报告电子邮件中使用 有没有办法利用内置的 ysod 生成器 我会调查ELMAH ASP NET 的错误日志模块和处理程序 ELMAH 错误记录模块和 Hand
  • 本地 MQTT mosquitto 实例正在连接 ECONNREFUSED 127.0.0.1:1883

    我正在尝试通过 docker 和 docker compose 运行本地 mosquitto 代理 发布者和订阅者设置 但发布者无法连接到代理 但是 通过 cli 连接到本地代理可以正常工作 运行以下设置时出现以下错误 Error conn
  • 如何/是否在 Xcode 中制作通用故事板

    在 Xcode 中创建情节提要文件时 必须选择它是适用于 iPhone 还是 iPad 这意味着人们应该始终将 iPhone 和 iPad UI 放入单独的故事板中 这是真的 我的应用程序有多个故事板 虽然 iPhone 和 iPad 之间
  • 使用 Vagrant Docker 提供程序从 boot2docker 转发端口

    我正在尝试利用 Vagrant 1 6 的 Docker 提供程序 但似乎遇到了障碍 我可以成功启动 Docker 容器和来宾操作系统 但无法从主机操作系统访问容器内启动的服务 这是我的 Vagrantfile VAGRANTFILE AP
  • Python 在类定义中实例化类

    我正在尝试向保存该类实例的类添加一个变量 以下是我的代码的缩短版本 class Classy def init self self hi HI CLASSIES variable holds instances of class Class
  • VueJS 渲染 VNode

    tl dr 给定一个 VueJSVNode对象 如何获取渲染后生成的 HTML 元素 e g gt temp1 VNode tag h1 data undefined children Array 1 text undefined elm
  • Spring Boot 图像上传和服务

    I m making new Spring Boot app and want to be able to store and serve images I want images to be stored in applications
  • Android:防止显示屏关闭

    我编写了一个小游戏 仅由一些传感器控制 没有触摸屏输入或类似的东西 问题是 游戏几秒钟后 屏幕关闭 因为没有触摸输入 是否有类似清单条目之类的东西可以防止屏幕出现这种行为 regards 在游戏的 Activity 中使用此代码作为 sup
  • 如何在 NTFS 上创建稀疏文件?

    我正在测试一个稀疏文件 但我的测试代码不能很好地工作 HANDLE h CreateFileW L D sparse test GENERIC READ GENERIC WRITE FILE SHARE READ FILE SHARE WR
  • 是否可以枚举通过 [ADSI] 对象的 Invoke() 可用的所有方法和属性?

    我很好奇是否有人可以描述如何通过绑定实例枚举可用的 ADSI 方法 ADSI instance psbase Invoke 研究已经出现 请参阅 ADSI 接口的文档 但我对这个答案不是特别满意 如果我实例化为 ADSI lhost gro
  • 带有条件运算符的奇怪 java 行为。这是一个错误吗?

    您能运行下面的命令并解释一下吗 Object o true new Integer 1 new Double 2 0 System out println o 我发现这很令人惊讶 因为有人会期望打印 1 而不是 1 0 这一点也不奇怪 尽管