Java对象的比较[猿教程]

本文详细探讨了Java中对象比较的各个方面,从基础的==和!=操作符到Object#equals方法。介绍了基本数据类型和对象的比较差异,特别强调了Integer缓存和字符串常量池。还讨论了如何在对象具有相同值但不同地址时实现相等性比较,并通过示例解释了对象平等的重要性。
摘要由CSDN通过智能技术生成

https://yuanjiaoc.com/tutorial/article/10008icon-default.png?t=M666https://yuanjiaoc.com/tutorial/article/10008

介绍

对象比较是面向对象编程语言的一个基本特性。

在本教程中,我们将探索允许比较对象的Java语言的一些特性。我们还将研究三方库中的此类特性。

==和!=操作符

让我们从==和!=操作符开始,它们可以分别判断两个Java对象是否相同。

基本数据类型

对于基本数据类型,相同意味着具有相同的值:

assertThat(1 == 1).isTrue();

由于自动开箱,这也适用于比较原始值与其包装类型对应的值:

Integer a = new Integer(1);
assertThat(1 == a).isTrue();

如果两个整数有不同的值,==操作符将返回false,而!=操作符将返回true。

对象

假设我们想比较两个具有相同值的Integer包装类型:

Integer a = new Integer(1);
Integer b = new Integer(1);

assertThat(a == b).isFalse();

通过比较两个对象,这些对象的值不是1。相反,它们在堆栈中的内存地址是不同的,因为两个对象都是使用new操作符创建的。如果我们将a赋值给b,则会得到不同的结果:

Integer a = new Integer(1);
Integer b = a;
assertThat(a == b).isTrue();

现在让我们看看当我们使用工厂方法Integer#valueOf时会发生什么:

Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(1);

assertThat(a == b).isTrue();

在这种情况下,它们被认为是相同的。这是因为valueOf()方法将Integer存储在缓存中,以避免创建太多具有相同值的包装器对象。因此,该方法为两个调用返回相同的Integer实例。 Java的字符串也是这样:

assertThat("Hello!" == "Hello!").isTrue();

但是,如果它们是使用new操作符创建的,那么它们就不一样了。

最后,两个空引用被认为是相同的,而任何非空对象被认为与空不同:

assertThat(null == null).isTrue();

assertThat("Hello!" == null).isFalse();

当然,相等操作符的行为可能是有限的。如果我们想要比较两个映射到不同地址的对象,并且根据它们的内部状态认为它们是相等的,该怎么办?我们将在下一节中看到如何做到这一点。

Object#equals 方法

。。。。。

转载地址:Java对象的比较|猿教程|

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值