gpt4 book ai didi

java - 将原始对象与包装对象进行比较,== 行为无法解释

转载 作者:IT老高 更新时间:2023-10-28 21:17:21 24 4
gpt4 key购买 nike

我有一段代码需要理解:

public static void main(String[] args) {
Character c = new Character('a');
Character cy = new Character('a');
char cx = 'a';

System.out.println(c == cx);
System.out.println(cx == cy);
System.out.println(c == cy);
}

输出:

true
true
false

我无法理解为什么只有第三条语句失败。

编辑:这个问题与 .equals vs == 问题不同,因为这是关于原始与对象比较的问题。

最佳答案

ccy 引用 Character 类的不同实例(每次调用构造函数时,都会创建一个新实例),所以比较这些引用会返回 false

另一方面,当您将它们中的任何一个与原始 cx 进行比较时,它们将被拆箱为 char,并且 char 比较返回真。

如果您使用 Character.valueOf('a') 而不是 new Character('a'),您将在两个调用中获得相同的实例,并且引用比较将返回 true(因为如果参数 <= 127,valueOf 返回缓存的 Character 实例)。

关于java - 将原始对象与包装对象进行比较,== 行为无法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com