栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

==和equals的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

==和equals的区别

1. ==运算符

  • 可以使用在基本数据类型变量和引用数据类型变量中
  • 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型要相同)
    如果比较的是引用数据类型变量,比较两个对象的地址值是否相等,即两个对象是否指向堆空间中的同一个实体
package com.atguigu.java1;

public class Customer {
    private String name;
    private int age;

    public Customer() {
    }

    public Customer(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;
    }
}

package com.atguigu.java1;

public class EqualsTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 10;
        double d = 10.0;
        //基本数据类型
        System.out.println(i == j);//true
        System.out.println(i == d);//true
        char c = 10;
        System.out.println(i == c);//true

        char c1 = 'A';
        char c2 = 65;
        System.out.println(c1 == c2);//true

        //引用数据类型
        Customer customer1 = new Customer("Tom", 21);
        Customer customer2 = new Customer("Tom", 21);
        System.out.println(customer1 == customer2);//false

        String string1 = new String("str");
        String string2 = new String("str");
        System.out.println(string1 == string2);//false
    }
}

2. equals()

  • 是一个方法,而非运算符

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

  • Object类中equals()的定义:

  • 说明:Object类中定义的equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个对象是否指向堆空间中的同一个实体

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

package com.atguigu.java1;

import java.util.Date;
public class EqualsTest {
    public static void main(String[] args) {
        String string1 = new String("str");
        String string2 = new String("str");
        System.out.println(string1.equals(string2));//true

        Date date1 = new Date(111111111L);
        Date date2 = new Date(111111111L);
        System.out.println(date1.equals(date2));//true
    }
}

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

package com.atguigu.java1;

import java.util.Date;

public class Customer {
    private String name;
    private int age;

    public Customer() {
    }

    public Customer(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;
    }

    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj instanceof Customer) {
            Customer customer = (Customer) obj;
            //比较两个对象的每个属性是否都相同
            return this.age == customer.age && this.name.equals(customer.name);
        }
        return false;
    }
}

测试代码

package com.atguigu.java1;

import java.util.Date;
public class EqualsTest {
    public static void main(String[] args) {
        //引用数据类型
        Customer customer1 = new Customer("Tom", 21);
        Customer customer2 = new Customer("Tom", 21);
        System.out.println("Customer中equals()方法:" + customer1.equals(customer2));//true
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631062.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号