栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java对象的比较[猿教程]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java对象的比较[猿教程]

https://yuanjiaoc.com/tutorial/article/10008https://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对象的比较|猿教程|

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号