equals()方法

equals()方法是根类Object中的一个方法,子类可以根据需要重写该方法(比如:String类)。

一、Object类中的equals()方法实现如下:

1     public boolean equals(Object obj) {
2         return (this == obj);
3     }

例子:

 1 package com.mianshi.easy;
 2
 3 class A{}
 4
 5 public class Equals {
 6
 7     public static void main(String[] args) {
 8         A a1 = new A();
 9         A a2 = new A();
10         A a3 = a2;
11         System.out.println(a1.equals(a2));
12         System.out.println(a3.equals(a2));
13     }
14 }
15
16 结果:
17 false
18 true

 1 package com.mianshi.easy;
 2
 3 class A{}
 4
 5 public class Equals {
 6
 7     public static void main(String[] args) {
 8         A a1 = new A();
 9         A a2 = new A();
10         A a3 = a2;
11         System.out.println(a1.equals(a2));
12         System.out.println(a3.equals(a2));
13     }
14 }
15
16 结果:
17 false
18 true

类A默认继承自Object类,所以具有父类中的public修饰的的equals()方法,并且功能相同。

该方法实现的功能是比较两个对象是否是同一个对象,是同一个对象回true,否则,返回false。equals()比较的是obj存放的对象的地址值,这一点跟“==”一样。

二、String类的中的equals()方法实现如下:

 1  public boolean equals(Object anObject) {
 2         if (this == anObject) {              //先比较两个对象是否为同一个对象
 3             return true;
 4         }
 5         if (anObject instanceof String) {  
 6             String anotherString = (String)anObject;  
 7             int n = value.length;
 8             if (n == anotherString.value.length) {   //比较两个对象的值是否相同,值相同equals()返回true
 9                 char v1[] = value;
10                 char v2[] = anotherString.value;
11                 int i = 0;
12                 while (n-- != 0) {
13                     if (v1[i] != v2[i])
14                         return false;
15                     i++;
16                 }
17                 return true;
18             }
19         }
20         return false;
21     }

例子:

 1 package com.mianshi.easy;
 2
 3 public class Equals {
 4
 5     public static void main(String[] args) {
 6         String a1 = new String("Hello");
 7         String a2 = new String("Hello");
 8         String a3 = "Hello";
 9         //a1和a2明显不是一个对象,但是equals()返回true
10         System.out.println(a1.equals(a2));
11         //a1和a3不是同一个对象,equals()返回true
12         System.out.println(a3.equals(a1));
13     }
14 }
15
16 结果:
17 true
18 true

 1 package com.mianshi.easy;
 2
 3 public class Equals {
 4
 5     public static void main(String[] args) {
 6         String a1 = new String("Hello");
 7         String a2 = new String("Hello");
 8         String a3 = "Hello";
 9         //a1和a2明显不是一个对象,但是equals()返回true
10         System.out.println(a1.equals(a2));
11         //a1和a3不是同一个对象,equals()返回true
12         System.out.println(a3.equals(a1));
13     }
14 }
15
16 结果:
17 true
18 true

说明String类里面重写了父类Object类的equals()方法,重写后比较的是两个String对象的内容是否相同,相同则为true。

时间: 2024-10-24 12:51:29

equals()方法的相关文章

equals方法的使用

对于字符串来说,使用"=="运算符和"equals()"方法来比较,其比较方式不同.==运算符用于比较两个变量本身的值,即两个对象在内存中的首地址:equals()方法比较的是两个字符串中所包含的内容是否相同.对于非字符串类型的变量来说,==运算符和equals()方法都是用来比较所指对象在堆内存中的首地址,即比较两个类类型的变量是否指向同一个对象. 例 class Test { int x=1; } public class ep3_1{ public stati

Object.equals() 方法

Object.equals() 方法: 1 public class EqualsTest1 { 2 public static void main(String[] args) { 3 //Cat c1 = new Cat(); 4 //Cat c2 = new Cat(); 5 //System.out.println(c1 == c2);//result:false 6 Cat c3 = new Cat(1,2,3); 7 Cat c4 = new Cat(1,2,3);//在重写equa

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru

【Java实战】源码解析为什么覆盖equals方法时总要覆盖hashCode方法

1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * <p> *

java中 == 和 equals()方法的区别

参考博客: 1.当要判断两个对象是否是相同时,可以重写equals()方法.....参考:   http://www.2cto.com/kf/201408/327873.html 2.具体 : http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html 3.http://blog.csdn.net/xcysuccess3/article/details/6557771 主要注意的地方:String Integer等类的equal

【宋红康学习日记11】Object类与equals方法

1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在String,File,Date类重写了equals方法,比较的是值: 3 String类内存解析 Person p1=new Person("花花",20); Person p2=new Person("曹操",40); syso(p1==p2);//false syso

JAVA中equals方法与hashCode方法学习

首先参考文章:http://www.oschina.net/translate/working-with-hashcode-and-equals-methods-in-java 1,equals方法的比较与 == 的区别是什么?为什么需要重写equals方法? 2,为什么说重写了equals方法最好重写hashCode方法?该问题在参考博文里面有一个实例解释了原因. 3,如何重写equals方法和hashCode方法? ——————————————————————————————————————

重写hashCode与equals方法的作用

为了阐明其作用,我们先来假设有如下一个Person类. class Person { public Person(String name, int age) { this.name = name; this.age = age; } private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; }

java equals 方法

package com.mydemo.controller; public class TestEquals { public static void main(String[] args) { Dog d1 = new Dog(1, 2, 3); Dog d2 = new Dog(1, 2, 3); // d1 永远不等于 d2,比较的是两个对象的引用 System.out.println(d1 == d2); // Object 的equals 方法默认比较两个对象的引用 System.ou

重写equals方法需要注意的几点

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求:1.自反性:对于任何非空引用x,x.equals(x)应该返回true