Java最高

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程

1.概述

在这个简短的教程中,我们将讨论比较两者的不同方法实例。我们强调使用引用比较运算符(= =)。

2.参考比较问题

是一个包装器类对于原语类型。由于它们是对象而不是原始值,我们需要比较的内容使用实例.equals ()代替引用比较操作符(==)。

在某些情况下,我们可能会认为==是可以的,但外表是具有欺骗性的。考虑到我们可以用==来表示较低的数字:

长l1 = 127L;长l2 = 127L;为了(l1 = = l2) .isTrue ();

但不是用更大的数字。我们最终会有问题如果值不在-128到127的范围内,有完全不同的和意想不到的结果:

长l1 = 128L;长l2 = 128L;为了(l1 = = l2) .isFalse ();

这是因为的实例维护一个常量池在-128到127之间

然而,这种优化并没有给我们使用==的许可。一般情况下,两个盒装实例具有相同的原始值不会产生相同的对象引用。

3.使用.equals ()

解决方法之一是使用.equals ()这将评估内容(而不是引用)两个对象:

长l1 = 128L;长l2 = 128L;为了(l1.equals (l2) .isTrue ();

4.Objects.equals ()

使用的问题equals ()我们需要谨慎行事吗参考。

幸运的是,有一个-安全实用方法我们可以使用-Objects.equals ()

让我们看看它在实践中是如何工作的:

Long l1 = null;长l2 = 128L;assertThatCode(() - >对象。= (l1, l2)) .doesNotThrowAnyException ();

如我们所见,我们不需要麻烦任何我们要比较的是null。

在引擎盖下,Objects.equals ()首先使用==操作符进行比较,如果失败,则使用标准equals()。

5.拆箱长值

5.1。使用.longValue ()方法

接下来,让我们以一种安全的方式使用“==”比较运算符。类数量有一个方法.longValue ()哪一个打开了原语值:

长l1 = 128L;长l2 = 128L;为了(l1.longValue () = = l2.longValue ()) .isTrue ();

5.2。转换为原始值

解盒A的另一种方法是通过铸造对象到基本类型。因此,我们将提取原始值,然后可以继续使用比较运算符:

长l1 = 128L;长l2 = 128L;assert ((long) l1 == (long) l2). itrue ();

注意,.longValue ()方法或使用类型转换时,我们应该检查对象是否为我们可以有NullPointerException如果对象是

6.结论

在这个简短的教程中,我们探讨了不同的比较方法对象。我们已经分析了比较对象或内容的引用时的差异。

一如既往,本文的完整源代码是可用的在GitHub

Java底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
2评论
最古老的
最新的
内联反馈
查看所有评论
本文评论关闭!