本文共 4443 字,大约阅读时间需要 14 分钟。
@[TOC](== 和 equals() 区别)
public boolean equals(Object obj) { return (this == obj);}
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体,像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
4. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写. 重写的原则:比较两个对象的实体内容是否相同.既可以使用在基本数据类型变量上也可以使用在引用数据类型变量
比较:
#如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同) #如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。补充:== 符号使用时,必须保证符号左右两边的变量类型一致。
未重写equals方法:
import study.day_13.java1.Customer;import java.util.Date;class Equals{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Equals() { } public Equals(String name, int age) { this.name = name; this.age = age; }}public class TestDemo{ public static void main(String[] args) { System.out.println("基本数据类型**************"); int a=10; int b=10; int c=20; System.out.println(a==b); System.out.println(a==c); System.out.println("引用数据类型**************"); Equals eq1=new Equals("Tom",22); Equals eq2=new Equals("Tom",22); System.out.println(eq1==eq2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println("比较****************************"); String str1 = new String("atguigu"); String str2 = new String("atguigu"); System.out.println(str1 == str2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println(str1.equals(str2));//true(equals只能适用于引用数据类型,一般情况下用于判别两字符串的内容是否相同。) System.out.println(eq1.equals(eq2));//false(Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) Date date1 = new Date(32432525324L); Date date2 = new Date(32432525324L); System.out.println(date1.equals(date2));//true }}
结果为:
基本数据类型**************truefalse引用数据类型**************false比较****************************falsetruefalsetrue
重写equals方法:
import study.day_13.java1.Customer;import java.util.Date;import java.util.Objects;class Equals{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Equals() { } public Equals(String name, int age) { this.name = name; this.age = age; } //重写equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Equals)) return false; Equals equals = (Equals) o; return getAge() == equals.getAge() && Objects.equals(getName(), equals.getName()); } @Override public int hashCode() { return 0; }}public class TestDemo{ public static void main(String[] args) { System.out.println("基本数据类型**************"); int a=10; int b=10; int c=20; System.out.println(a==b); System.out.println(a==c); System.out.println("引用数据类型**************"); Equals eq1=new Equals("Tom",22); Equals eq2=new Equals("Tom",22); System.out.println(eq1==eq2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println("比较****************************"); String str1 = new String("atguigu"); String str2 = new String("atguigu"); System.out.println(str1 == str2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println(str1.equals(str2));//true(equals只能适用于引用数据类型,一般情况下用于判别两字符串的内容是否相同。) System.out.println("重写equals方法后比较******"); System.out.println(eq1.equals(eq2));//true(重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。) Date date1 = new Date(32432525324L); Date date2 = new Date(32432525324L); System.out.println(date1.equals(date2));//true }}
结果为:
基本数据类型**************truefalse引用数据类型**************false比较****************************falsetrue重写equals方法后比较******truetrueProcess finished with exit code 0
转载地址:http://aerpi.baihongyu.com/