> 文档中心 > Java-“equals“ 与 “==“详解

Java-“equals“ 与 “==“详解

Java-"equals" 与 "=="详解

  • 前言
  • "equals" 与 "=="
    • 1. "==" 的使用
    • 2. "equals" 的使用
      • 2.1 概述
      • 2.2 代码演示
    • 3. "==" 和 "equals" 的区别
      • 3.1 概述
      • 3.2 代码演示


前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!

上篇博文:Java-多线程的使用

“equals” 与 “==”

1. “==” 的使用

1.1 概述

⭕ 用于基本类型比较值时:只要两个变量的值相等,即为true

⭕ 用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,==才返回true

⭕ 用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

1.2 代码演示

演示一:

//基本数据类型int i = 10;int j = 10;double d = 10.0;System.out.println(i == j);//trueSystem.out.println(i == d);//truechar c = 10;System.out.println(i == c);//truechar c1 = 'A';char c2 = 65;System.out.println(c1 == c2);//true

演示二:

   String str1 = new String("嘻嘻");   String str2 = new String("嘻嘻");   System.out.println(str1 == str2);//false

演示三:

int i = 10;boolean b = true;//System.out.println(i == b); // 报错: Operator '==' cannot be applied to 'int', 'boolean'

2. “equals” 的使用

2.1 概述

⭕ 是一个方法,而非运算符。

⭕ 只能适用于引用数据类型

Object类中equals()的定义:

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

说明:Object类中定义的equals()==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。

⭕ 像StringDateFile、包装类等都重写Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。

⭕ 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写,重写的原则:比较两个对象的实体内容是否相同。

2.2 代码演示

演示一:

    Person p1=new Person();    Person p2=new Person();    System.out.println(p1.equals(p2));//false    //Person为自定义的类,没有对equals()进行重写 String str1 = new String("小老师ir");String str2 = new String("小老师ir");    System.out.println(str1.equals(str2));//true Date date1 = new Date(32432525324L);Date date2 = new Date(32432525324L);System.out.println(date1.equals(date2));//true

演示二:

public class Customer {private String name;private int age;@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Customer other = (Customer) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}

3. “==” 和 “equals” 的区别

3.1 概述

== 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址

equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals()方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

⭕ 具体要看自定义类里有没有重写Objectequals()方法来判断。

⭕ 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

3.2 代码演示

   int it = 65;   float fl = 65.0f;   System.out.println(6565.0f是否相等?” + (it == fl)); //true   char ch1 = 'A';    char ch2 = 12;   System.out.println("65和'A'是否相等?" + (it == ch1));//true   System.out.println(12和ch2是否相等?" + (12 == ch2));//true   String str1 = new String("hello");   String str2 = new String("hello");   System.out.println("str1和str2是否相等?"+ (str1 == str2));//false   System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true   System.out.println(“hello” == new java.util.Date()); //编译不通过