Java学习之Object类——equals方法

Object 类是类层次结构的根类每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法,学习Object 类的六个方法——equals(Object obj)、finalize、toString、hashCode、getClass、clone

目录

==和equals的对比

一、==的作用

二、equals方法

定义和作用

源代码

String重写equals方法

String类中的equals源代码(jdk8)

运行逻辑

while循环的流程分析

Interger重写equals方法

源代码

应用 


==和equals的对比

==是一个比较运算符

一、==的作用

1.==:既可以判断基本类型,又可以判断引用类型

2.==判断基本类型的时候,判断的是值是否相等

eg:int n1 = 10;

     double d1 = 10.0

package com.hspedu.object_;

public class Equals01 {
    public static void main(String[] args) {
        int n1 = 10;
        double d1 = 10.0;
        System.out.println(n1== d1);
    }
}

Java学习之Object类——equals方法_第1张图片

 3.==判断引用类型的时候,判断的是地址是否相等,即判定是不是同一个对象

package com.hspedu.object_;

public class Equals01 {
    public static void main(String[] args) {
        //基本类型
        int n1 = 10;
        double d1 = 10.0;
        System.out.println(n1== d1);
        //引用类型
        A a = new A();
        A b = a;
        A c = b;
        System.out.println(a==b);//true
        System.out.println(a==c);//true
        System.out.println(b==c);//true

    }
}
class A{}


对象引用a,b,c指向同一个对象,所以他们的地址是一样的,结果为true

运行结果

Java学习之Object类——equals方法_第2张图片

 编译类型不一致时

Java学习之Object类——equals方法_第3张图片Java学习之Object类——equals方法_第4张图片

 

 总结:主要看是不是指向同一个地址空间

二、equals方法

定义和作用

equals不是运算符,是Object类中的方法,只能判断引用类型

子类中往往重写该方法,用于判断内容是否相等。比如lnteger、String

源代码

Ctrl+B

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

String重写equals方法

用equals比较两个字符串是否相等

"hello".equals("abc");

String类中的equals源代码(jdk8)

public boolean equals (Object anObject){//传入的时候已经完成了向上转型
            if (this == anObject) {//如果是同一个对象
                return true;//返回 true
            }
            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;//如果返回false,就终止while循环
                        i++;
                    }
                    return true;//如果两个字符串的所有字符都相等,则返回 true
                }
            }
            return false;//如果比较的不是字符串,则直接返回 false
        }

运行逻辑

1)先判断地址是否相同(是否指向同一个对象空间),如果是的话,返回true,结束比较

2)判断运行类型是不是String类,如果是的话,执行步骤3,不是返回false

 3)判断字符串的长度是否相等,

4)将字符串----->字符型数组,然后一一比较数组内的元素是否相等

while循环的流程分析

Java学习之Object类——equals方法_第5张图片

Interger重写equals方法

源代码

/*
Interger也重写了equals方法,变成了判断两个值是否相同
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

 */

应用 

 Integer integer = new Integer(5);
        Integer integer1 = new Integer(5);
        System.out.println(integer == integer1);//比较地址,输出false
        System.out.println(integer.equals(integer1));

一个为false,一个为true

你可能感兴趣的:(java,学习)