equals()的使用:


一、适用性:
    任何引用数据类型都可以使用。

二、java.lang.Object类中equals()的定义:
    public boolean equals(Object obj)
    {
        return (this == obj);
    }

三、子类使用说明:
    -自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的equals(),比较两个对象的引用地址是否相同。(或比较两个对象是否指向了堆空间中的同一个对象实体)
    -对于像String、File、Date和包装类等,它们都重写了Object类中的equals()方法,用于比较两个对象的实体内容是否相等。

四、开发中使用说明:
    -实际开发中,针对自定义的类,常常会判断两个对象是否equals(),而此时主要是判断两个对象的属性值是否相等。
    所以:我们要重写Object类中的equals()方法。
    -如何重写:
        >手动自己实现
        >调用IDEA自动实现

import java.util.Objects;

public class UserTest
{
    public static void main(String[] args)
    {
        User u1 = new User("Tom",12);
        User u2 = new User("Tom",12);

        System.out.println(u1.equals(u2));//false--->true

        String str1 = new String("hi");
        String str2 = new String("hi");
        System.out.println(str1.equals(str2));
    }
}

class User
{
    String name;
    int age;

    public User()
    {

    }

    public User(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

//    public boolean equals(Object obj)
//    {
//        if(this==obj)
//        {
//            return true;
//        }
//
//        if(obj instanceof User)
//        {
//            User user = (User) obj;
//            //方法一
//            if(this.age == user.age&&this.name.equals(user.name))
//            {
//                return true;
//            }
//            else
//            {
//               return false;
//            }
//            //方法二
//            return this.age == user.age&&this.name.equals(user.name);
//        }
//        return false;
//    }

    //idea自动实现

    @Override
    public boolean equals(Object o)
    {
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }


}

五、区分==和equals()
    ==:逻辑运算符
        使用范围:基本数据类型、引用数据类型
            -基本数据类型:判断数据值是否相等
            -引用数据类型:判断地址值是否相等
    equals():方法
        使用范围:引用数据类型
        具体使用:对于类来说,重写与不重写的区别

toString()的使用:


一、Object类中toString()的定义:
    public String toString()
    {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

二、开发中的使用场景:
    -平时调用System.out.println()打印对象引用变量时,其实就调用了对象的toString()

三、子类使用方法说明:
    -自定义的类,在没有重写Object类的toString()的情况下,默认返回当前对象的地址值
    -像String、File、Date或包装类等Object子类都重写了toString()方法,在调用toString()时,返回当前对象的实体内容

四、开发中使用说明:
    -习惯上,开发中对于自定义的类在调用toString()时,也希望显示其对象的实体内容,而非地址值。这时候,就需要重写Object类中的toString()

public class toStringTest
{
    public static void main(String[] args)
    {
        User u1 = new User("Tom",12);
        System.out.println(u1.toString());
        System.out.println(u1);
    }
}

class User
{
    String name;
    int age;

    public User()
    {

    }
    public User(String name,int age)
    {
        this.name=name;
        this.age=age;
    }

    //手动生成
//    public String toString()
//    {
//        return "User{ name = "+name+", age = "+age+" }";
//    }

    //idea自动生成
    @Override
    public String toString()
    {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐