java 不equals_java – 为什么这些==但不是`equals()`?

对于int,Integer和其他类型的数字,我对Java对待==和equals()的方式感到困惑。例如:

Integer X = 9000;

int x = 9000;

Short Y = 9000;

short y = 9000;

List results = new ArrayList();

// results.add(X == Y); DOES NOT COMPILE 1)

results.add(Y == 9000); // 2)

results.add(X == y); // 3)

results.add(X.equals(x)); // 4)

results.add(X.equals(Y)); // 5)

results.add(X.equals(y)); // 6)

System.out.println(results);

输出(也许你应该先猜测):

[true, true, true, false, false]

> X == Y不编译是不可预料的,是不同的对象。

>我有点惊讶,Y == 9是真的,因为9是默认的int,并给出1)甚至没有编译。请注意,您不能将int放入一个期望Short的方法中,但在这里它们是相等的。

>这是令人惊讶的,与两个相同的原因,但它似乎更糟。

>不奇怪,因为x是自动装箱和整数。

>不奇怪,因为不同类中的对象不应该相等()。

>什么? X == y是true,但X.equals(y)是false?不应该总是比equals()更严格?

如果有人能帮助我理解这一点,我会感激的。为什么==和equals()以这种方式行事?

编辑:我已经更改了9到9000,以表明这种行为与整数从-128到127的任何不寻常的方式都不相关。

第二编辑:好的,如果你认为你明白这个东西,你应该考虑以下几点,只是为了确保:

Integer X = 9000;

Integer Z = 9000;

short y = 9000;

List results = new ArrayList();

results.add(X == Z); // 1)

results.add(X == y); // 2)

results.add(X.equals(Z)); // 3)

results.add(X.equals(y)); // 4)

System.out.println(results);

输出:

[false, true, true, false]

原因,尽我所知:

>不同的实例,如此不同。

> X取消装箱,那么相同的价值,就这么平等。

>相同的价值,相等。

> y不能被包装到整数,所以不能相等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值