详细讲解Java中==与equals的区别对比

 更新时间:2023年09月04日 08:41:37   作者:cool_boy  
这篇文章主要为大家详细介绍了Java中==与equals的区别对比,文中有详细的代码示例供大家参考,具有一定的参考价值,感兴趣的同学可以参考阅读下

java == 与 equals 的对比

== 是一比较运算符

  • 既可以判断基本类型,又可以判断引用类型。
  • 如果判断基本类型,判断的是值是否相等。
   
    int x = 80;
    double y = 80.0;
    System.out.println(x==y); //true
  • 如果判断引用类型,判断的是地址是否相等,既判断是不是同一个对象。
    A a = new A();
        A b = a;
        A c = b;
    System.out.println(b==c); //ture
    System.out.println(a==c); //ture
    B g = a;
    System.out.println(g==a); //ture
class B{ }
class A extends B{ }

equals 方法

  • 是Object类中的方法,只能判断引用类型。
Object的 equals 源码
public boolean equals(Object anObject) {
    if (this == anObject) {   //如果是同一个对象
        return true;      //返回true
    }
}   
案例
     Cat cat1 = new Cat("小花",2);
     Cat cat2 = new Cat("小花",2);
     /*
      Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,**子类可
      以使用  Object 所有方法**。
     */
     System.out.println(cat1.equals(cat2));  //false   判断是不是同一个对象
class Cat{
    private String name;
    private int age;
    public Cat(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}
  • 默认判断的是地址是否相等,既判断是不是同一个对象。子类中往往重写该方法,用于判断内容是否相等。比如( String, Integer)
//把object的equals方法重写了,变成了比较两个字符串值 是否相同
String类的 equals方法 源码
if (anObject instanceof String) { //判断类型
    String anotherString = (String)anObject; //向下转型
    int n = value.length;
    if (n == anotherString.value.length) { //如果长度相同
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = 0;
        while (n-- != 0) { //然后一个一个的比较字符
            if (v1[i] != v2[i])
                return false;
            i++;
        }
        return true; //如果两个字符串的所有字符都相等,则返回true
    }
}
return false; //如果比较的不是字符串,则直接返回false
案例一:
        Cat cat1 = new Cat("小花",2);
        Cat cat2 = new Cat("小花",2);
        System.out.println(cat1.equals(cat2));  //true
class Cat{
    private String name;
    private int age;
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //这里重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age &&
                Objects.equals(name, cat.name);
    }
    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;
    }
}
案例二:
    String str1 = new String("好好学习");
    String str2 = new String("好好学习");
    System.out.println(str1.equals(str2)); //true
Integer 也重写了object的 equals 方法,变成了判断两个值是否相同
源码  
  public boolean equals(Object obj) {
     if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
  }
Integer integer1 = new Integer(1000);
Integer integer2 = new Integer(1000);
System.out.println(integer.equals(integer1)); //true 判断两个值是否相等

以上就是详细讲解Java中==与equals的区别对比的详细内容,更多关于Java ==与equals区别的资料请关注脚本之家其它相关文章!

相关文章

  • Java文件操作实例详解

    Java文件操作实例详解

    这篇文章主要为大家详细介绍了Java文件操作实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Spring Cloud Data Flow初体验以Local模式运行

    Spring Cloud Data Flow初体验以Local模式运行

    这篇文章主要介绍了Spring Cloud Data Flow初体验以Local模式运行,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot实现统一封装返回前端结果集的示例代码

    SpringBoot实现统一封装返回前端结果集的示例代码

    在实际项目开发过程中,我们经常将返回数据的基本形式统一为JSON格式的数据。但项目可能是由很多人开发的,所以我们最好将返回的结果统一起来。本文介绍了SpringBoot实现统一封装返回前端结果集的示例代码,需要的可以参考一下
    2022-06-06
  • Java13 明天发布(最新最全新特性解读)

    Java13 明天发布(最新最全新特性解读)

    这篇文章主要介绍了Java13 明天发布,最新最全新特性解读,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 解决Java报错OutOfMemoryError的完整方案

    解决Java报错OutOfMemoryError的完整方案

    在Java编程中,OutOfMemoryError是一种常见的致命错误,通常发生在JVM内存耗尽时,本文将详细探讨OutOfMemoryError的成因、解决方案以及预防措施,帮助开发者理解和避免此类问题,从而提高代码的健壮性和可靠性,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java面试题冲刺第二十天--算法(1)

    Java面试题冲刺第二十天--算法(1)

    这篇文章主要为大家分享了最有价值的三道关于算法的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • MyBatis Map结果的Key转为驼峰式

    MyBatis Map结果的Key转为驼峰式

    今天小编就为大家分享一篇关于MyBatis Map结果的Key转为驼峰式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java实现TXT文件导入功能的详细步骤

    Java实现TXT文件导入功能的详细步骤

    在实际开发中,很多应用场景需要将用户上传的 TXT 文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用 Java 实现一个基本的 TXT 文件导入功能,需要的朋友可以参考下
    2025-08-08
  • SpringBoot结合Redis实现接口幂等性的示例代码

    SpringBoot结合Redis实现接口幂等性的示例代码

    本文主要介绍了SpringBoot结合Redis实现接口幂等性的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Java concurrency之公平锁(一)_动力节点Java学院整理

    Java concurrency之公平锁(一)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency之公平锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论