首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么System.out.println('a‘== 97.0)给出了事实

问为什么System.out.println('a‘== 97.0)给出了事实
EN

Stack Overflow用户
提问于 2022-05-22 08:09:39
回答 2查看 111关注 0票数 1

我知道'==‘操作符检查它们是否存在于char中相同的内存位置,但是为什么,当我比较char和double数据类型时,Java给了我true?它们不是不同的数据类型吗?以及为什么它没有给我编译时错误,因为根据文档:

如果我们将==应用于对象类型,那么参数类型之间应该有兼容性(子到父、父到子或者相同类型)。否则,我们将得到编译时错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-22 08:22:01

我知道'==‘操作符如果它们存在于Java中相同的内存位置.

不使用原语,只使用引用类型(对象)。在中,==/!=有三个部分:

  1. !=
  2. !=
  3. !=

double和char都是数字,所以您指的是第一个。它描述了它所通过的步骤(必要时为转换,必要时为推广,必要时为值集转换,必要时为解拳 ),以获取char和double并进行转换,以便对它们进行数字比较。

票数 2
EN

Stack Overflow用户

发布于 2022-05-22 08:23:44

在Java中,char和double是原语,它们通过使用==进行值比较,而不是按内存位置进行比较,这仅适用于对象(引用类型)。

当您执行'a' == 97.0时,这是char和double之间的比较。char是一个无符号整数,与double相比,char经历了向double的扩展转换。字符'a'对应于数字值97,因此当转换为double时,它是97.0。给定97.0 == 97.0是真的,这是表达式的结果。

还请参阅Java语言规范中的内容:

  • 15.21.1.数值等式算子==和!= 如果相等运算符的操作数都是数值类型,或者一个是数值类型,另一个是可转换(第5.1.8条)为数字类型,则在操作数(§5.6)上执行二进制数字提升。
  • 5.6。数值上下文 数值提升确定数值上下文中所有表达式的提升类型。选择提升类型,使每个表达式可以转换为提升类型,在算术操作的情况下,为提升类型的值定义操作。数值上下文中表达式的顺序对于数值提升并不重要。这些规则如下:
代码语言:javascript
复制
1. [..]
代码语言:javascript
复制
2. Next, widening primitive conversion ([§5.1.2](https://docs.oracle.com/javase/specs/jls/se17/html/jls-5.html#jls-5.1.2)) and narrowing primitive conversion ([§5.1.3](https://docs.oracle.com/javase/specs/jls/se17/html/jls-5.html#jls-5.1.3)) are applied to some expressions, according to the following rules:
代码语言:javascript
复制
    - If any expression is of type double, then the promoted type is double, and other expressions that are not of type double undergo widening primitive conversion to double.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72335832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档