`

Java中对==,!=和equals的理解

阅读更多
在java中==,!=比较的是对象的索引,而equal才是比较对象的内容。如:
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
n1.equals(n2)为true,因为两个对象的内容是相同的
n1 == n2则为false,因为两个对象的索引不相同的

这是对基本类型的定义是这样的,如果是自己定义新对象model时,如果不重写equals方法则默认比较的也是索引,所以在自己定义对象时最好都要重写里面的hashcode和equals方法
这是thinkjava里面的例子
class Value {
  int i;
}
public class EqualsMethod2 {
  public static void main(String[] args) {
    Value v1 = new Value();
    Value v2 = new Value();
    v1.i = v2.i = 100;
    System.out.println(v1.equals(v2));
  }
} 输出为false;


因为对象Value没重写equals方法,所以默认比较的是索引,而v1和v2的索引是不相同的,如果你想通过比较里面的i的值来判断v1和v2是否相等,你就要重写他的hashcode和equals方法了。


项目实践
在实际项目中重写自定义对象的hashcode和equals方法时也要注意自己的方式,看是否满足需求而定义这个方法,我就犯过一次错误

项目里面有一个对象是Figure,我定义hashcode/equals方法时只定义了id,只要id相同则就认为对象相同,而真正需求则不能满足,他只是满足了页面的显示了,那时id肯定不会为空。
由于在项目中这个对象是和另一个对象是多对一的关系,所以我要用Set集合来存Figure,这时错误就出现了,当我新增加多个Figure对象时,Set里面总是只存一个,因为他比较的是id,由于新增加的对象,还没有id呢,所以默认程序默认他们是相同的对象,最后导致项目运行时出了问题,数据不对,最后我们加了另一个属性name就好了,我们不可能把Figure属性都放在里面的,那样也会不会满足需求的
分享到:
评论

相关推荐

    java中equals和==的区别

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...

    Java中的==和equals区别

    ### Java中的`==`与`equals`方法的区别详解 在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    浅谈java 中equals和==的区别

    在Java编程语言中,`equals()` 和 `==` 运算符经常被用来比较对象,但它们之间存在着显著的区别。理解这些差异对于编写正确、健壮的代码至关重要。以下是关于 `equals()` 和 `==` 在Java中的详细解释。 首先,`==` ...

    ==和equals的区别

    Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...

    java中equals和==的区别.docx

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的...

    浅谈Java中的equals和==Java开发Java经验

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    java中equals()函数的用法 equals和==的区别

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...

    java中equals和==的比较.pdf

    总结,理解`equals()`和`==`的区别是Java编程中的关键知识点。在使用时,根据需要比较的是对象的引用还是内容,选择适当的操作符或方法。对于String类,由于其特殊的常量池机制,`==` 和 `equals()` 的行为可能与...

    java中equals和==的区别.pdf

    总之,理解Java中 `equals()` 和 `==` 的区别至关重要,尤其是在处理字符串时。在比较对象内容时应使用 `equals()`,而在检查对象引用是否相同(即是否指向同一个实例)时则使用 `==`。同时,合理利用字符串缓冲池...

    java中equals和==的区别.

    在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象的两种不同方式,它们在处理不同类型的数据时有不同的行为。了解这两者的区别对于编写正确的代码至关重要。 `==`运算符: 1. `==`用于比较基本类型的...

    java基础之 “==”与“equals”区别详解

    "java基础之“==”与“equals”区别详解" 根据java基础之“==”与“equals”区别详解,以下是相关知识...学习java基础之“==”与equals()需要充分理解它们的区别和应用场景,并且需要通过实践和练习来熟悉它们的使用。

    Java中equals与==的用法和区别

    Java中equals与==的用法和区别 Java 中的 equals 与 == 是两个常用的比较操作符,但是它们的用法和区别却非常重要。理解它们的差异是编写高效、正确的 Java 程序的关键。 什么是 == ? 在 Java 中,== 是一个比较...

    java中equals和==的区别[文].pdf

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间存在着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`equals()`方法是`java.lang.Object`类的一个成员...

Global site tag (gtag.js) - Google Analytics