比较Java中的Character,Integer和类似类型:使用equals或==?

表演:

我想确定Java中的某些内容:如果我有一个Character,Integer或Long以及类似的东西,我应该使用equals还是==足够?

我知道使用字符串不能保证每个唯一字符串只有一个实例,但是我不确定其他盒装类型。

我的直觉是使用equals,但我想确保自己没有浪费性能。

乔恩·斯基特(Jon Skeet):

编辑:规范为装箱转换提供了一些保证。5.1.7节开始

如果要装箱的值p为true,false,一个字节,介于\ u0000到\ u007f之间的char或-128和127之间的整数或短数,则令r1和r2为任何两次装箱转换的结果的p。r1 == r2总是这样。

请注意,该实现可以使用更大的池。

确实会避免编写依赖于此的代码。不是因为它可能会失败,而是因为它并不明显-很少有人会非常了解规范。(我以前认为这是依赖于实现的。)

您应该使用equals或比较基础值,即

if (foo.equals(bar))

要么

if (foo.intValue() == bar.intValue())

请注意,即使保证自动装箱使用固定值,其他调用者也始终可以创建单独的实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用equals比较Java中的日期

Java中的==和.equals()

比较Java .equals()中的字符串

Java:使用toString()。equals()和equals()

比较器和equals()

为什么.NET中Hashtables和字典不使用Equals()方法而不是GetHashCode进行键比较?

比较Java中的类类型

在Java中动态比较类型

是否有可能在Java中制作类似于Comparator的内容,但用于实现自定义的equals()和hashCode()

使用string.equals比较Java中的两个字符串数组

如何在Dhall中定义和使用类似Haskell的求和类型

使用std :: equal和equals运算符进行比较

Java使用Integer.parseInt进行比较

使用 H2 在 Spring Boot 中进行休眠查询:“BOOLEAN”和“INTEGER”类型的值不可比较

使用Java 8比较和删除ArrayList中的对象

使用Java 7的Objects.equals来比较字段吗?

使用Comparator而不是equals()比较两个Java集合

Java中==,equals和hashcode的示例

在Java中equals()和运算符“ ==”

Java中的equals()和hashCode()协定

hashCode和equals在int [] Java中的实现

类似函数的reduce函数中的转发和返回类型

在Java和equals(通用类)方法:类型安全

为什么我的List <Integer>中的元素是Character类型?

使用评估比较日期类型和整数类型

比较Java枚举成员:==或equals()?

Java中的int * not Integer *类型的容器

Java中类似JavaScript的Object数据类型?

Java中实现类似枚举类型的简洁方法