`
jaywee
  • 浏览: 41713 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

equals()方法注意事项

    博客分类:
  • JAVA
阅读更多

Collection (Java 2 Platform SE 5.0)<!----> <script type="text/javascript"> function windowTitle() { parent.document.title="Collection (Java 2 Platform SE 5.0)"; } </script> <noscript></noscript> <script src="/jdk150/H2HHinclude.js"></script>

equals

boolean equals
(Object
 o)
Compares the specified object with this collection for equality.

While the Collection interface adds no stipulations to the general contract for the Object.equals , programmers who implement the Collection interface "directly" (in other words, create a class that is a Collection but is not a Set or a List ) must exercise care if they choose to override the Object.equals . It is not necessary to do so, and the simplest course of action is to rely on Object 's implementation, but the implementer may wish to implement a "value comparison" in place of the default "reference comparison." (The List and Set interfaces mandate such value comparisons.)

The general contract for the Object.equals method states that equals must be symmetric (in other words, a.equals(b) if and only if b.equals(a) ). The contracts for List.equals and Set.equals state that lists are only equal to other lists, and sets to other sets . Thus, a custom equals method for a collection class that implements neither the List nor Set interface must return false when this collection is compared to any list or set. (By the same logic, it is not possible to write a class that correctly implements both the Set and List interfaces.)

用equals()进行两个对象的比较时,对象的类型必须一致.如List.euqals()返回true当且仅当比较的两个对象同为List.这也解释了Thinking in java(第四版中文版)中223页的这几行代码:

Pet cymric = new Cymric();
System.out.println("5: " + pets.indexOf(cymric));
System.out.println("6: " + pets.remove(cymric));
由于indexOf(),cotains(),remove()方法都需要用到equals(),尽管List<Pet>pets已经包含了crymric,但用新建的Crymric对象crymric作为indexOf()和remove()的参数都不会得到我们希望的结果,因为crymric不是List对象.

 

分享到:
评论

相关推荐

    equals方法的重写.docx

    #### 四、注意事项 1. **`equals`方法和`hashCode`方法应保持一致性**:如果两个对象根据`equals`方法是相等的,那么它们的`hashCode`也应该是相等的。这是因为某些集合框架(如`HashMap`)会使用`hashCode`来定位...

    js equals方法

    注意事项 自定义`equals`方法时,应考虑对象属性的顺序以及处理循环引用的情况,以免陷入无限递归。此外,如果对象包含`undefined`值,可能需要特殊处理,因为`undefined`在JavaScript中与其他类型的值比较时会有...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    注意事项** - 当重写 `equals()` 时,总是应该同时重写 `hashCode()`。 - 避免在 `equals()` 方法中使用 `==` 来比较对象,除非你想比较的是引用。 - 在 `hashCode()` 方法中,应使用对象的非空关键属性来计算哈希...

    Object类toString()和equals()方法使用解析

    equals()方法的注意事项 在使用equals()方法时,我们需要注意以下几点: 1. 除了用a.equals(b)这个写法,我们也可以用b.equals(a)这样写,但是这两个写法的结果可能不同,因为equals()方法可能会被重写。 2. 在...

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    7、**重写hashCode()方法的注意事项**: 重写`hashCode()`时,应确保它与`equals()`方法的逻辑一致。通常,`hashCode()`应该基于对象的那些参与`equals()`比较的属性来计算。如果两个对象`equals()`相等,它们的`...

    Java中Equals使用方法汇总

    本文将深入探讨`equals`方法的使用方法、重写注意事项以及与`hashCode`方法的关系。 ### Q1. 何时应该重写`equals`方法? 在需要比较对象的值而不是引用时,应重写`equals`方法。默认情况下,`equals`方法使用`==`...

    注释代码的13条注意事项

    代码注释的13条注意事项 作为一名IT专业人士,我将对代码注释的13条注意事项进行详细的解释和分析。 1. Comment each level(每个级别的注释有统一的风格) 在编写代码时,注释是非常重要的一部分。对于不同的...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们...理解其基本操作和注意事项,有助于编写出高效且准确的代码。

    Java程序基础学习注意事项总结

    在Java中,`==`和`equals()`方法有着不同的用途。`==`比较的是对象的内存地址,而`equals()`通常用于比较对象的内容。默认情况下,`equals()`与`==`行为一致,但在自定义类中,你可能需要重写`equals()`来比较对象的...

    JAVA中常用类的常用方法.docx

    - **注意事项**: - 要克隆的对象所属的类必须实现 `java.lang.Cloneable` 接口。 - 如果对象所属的类没有实现 `Cloneable` 接口,则调用 `clone()` 方法会抛出 `CloneNotSupportedException` 异常。 - `clone()...

    Struts使用技巧和注意事项

    ### Struts 使用技巧和注意事项 #### 一、Struts Validate 使用详解 在 Struts 框架中,数据验证是一项非常重要的功能,它确保了应用程序能够接收到合法且符合预期的数据输入。Struts 提供了多种方式进行数据验证...

    hashcode使用方法

    #### 重写hashCode的注意事项 1. **一致性**:在一个执行期间,只要对象的状态没有改变,其 `hashCode` 方法应该始终返回相同的值。 2. **性能考虑**:应尽可能减少碰撞(不同的对象具有相同的哈希码),同时保持...

    在Java(Android)中equals()与==

    5. 注意事项: - 不要在比较字符串时混用`==`和`equals()`。字符串是不可变对象,`"abc".equals("abc")`总是返回`true`,而`"abc" == "abc"`也通常是`true`,但直接比较字符串字面量是安全的,因为它们在编译时就...

    Java list.remove( )方法注意事项

    下面将详细介绍`List.remove()`方法的两种用法及其注意事项。 首先,`remove(int index)`方法用于根据提供的索引从列表中移除一个元素。索引是从0开始的,所以`remove(0)`会删除列表的第一个元素,`remove(1)`会...

    jQuery中inArray方法注意事项分析

    然而,正如标题和描述中提到的,使用`$.inArray()`时需要注意一些事项,因为JavaScript的弱类型特性可能会导致意外的结果。 `$.inArray(element, array)`方法接收两个参数:`element`是要查找的元素,`array`是待...

    hashcode与eqault比较

    #### 五、注意事项 1. **实现`equals`必须同时实现`hashCode`**:如果你覆盖了`equals`方法,那么你也必须覆盖`hashCode`方法,以保证一致性。 2. **避免返回固定值**:不要在`hashCode`方法中总是返回一个固定的值...

    java面试宝典 吐血推荐,很全面

    - **注意事项**: 在比较对象时,如果对象重写了`equals`方法,则`equals`将根据重写的逻辑来比较对象。 **12. 静态变量和实例变量的区别?** - **知识点**: 静态变量属于类级别,所有对象共享一份副本;实例变量...

    学习Java时自己整理的知识点 4

    4. **注意事项**: - 在使用`equals`方法之前,应确保对象不是null,否则会抛出`NullPointerException`异常。 - 当使用自定义类时,如果没有重写`equals`方法,那么它将比较对象引用而不是实际的内容。 - 如果...

    Java常见笔试、面试系列深度剖析第六讲

    五、覆盖equals()时的注意事项 当重写equals()方法时,务必同时重写hashCode()方法,以保持equals()和hashCode()的一致性。此外,要遵循以下原则: 1. 自反性:对于任何非null引用x,x.equals(x)应返回true。 2. ...

Global site tag (gtag.js) - Google Analytics