Java的==和equals方法

==用法

首先我们先来介绍一下==的用法,在java中
== 是对基本数据类型的内容来进行比较,也可以对相同的对象来进行比较
1.在java中如果 == 比较的是基本数据类型的话,那么则是判断两个数据的内容是否相等,下面用代码展示一下:

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 1;
        char ch = 'a';
        char ch1 = 'b';
        char ch2 = 'a';
        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println(ch == ch1);
        System.out.println(ch == ch2);
    }

运行后结果代码:

false
true
false
true

由此可见,使用==来比较基本数据类型的时候,表示的是判断两个值是否相等,那么我们来比较一下对象试一下:

public static void main(String[] args) {
        BlogUser blogUser = new BlogUser();
        BlogUser blogUser1 = new BlogUser();
        System.out.println(blogUser == blogUser1);
    }

结果为:

false

由此可见,虽然两个实例是同一个实体类创建,但是其实是保存在不同的内存地址中,因==如果比较的是对象的话则是比较对象的地址并不是内容,所以,结果为false

equals用法

可能大家都清楚Object类是java的父类,而equals是Object类的一个方法,所以equals也可以说是所有类的方法
equals方法主要用于两个对象的比较
让我们先来看一下在Object类中的equals的源码:

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

可以看见,Object类中的equals也是使用的==来进行比较,也就是与 == 一样来比较对象的地址,也就是说,如果我们不重写equals方法的话,那么依然是比较对象的地址,而不是对象的数据值是否相当,实际还是使用 == 来进行比较的.

但是有一个众所周知的类,叫String,这个类相信大家都不陌生,
因为String类已经重写了equals方法
我们先来看一下String类重写equals后的源码:

public boolean equals(Object anObject) {
        //首先使用==判断地址值是否相等,如果相等,则直接返回true,因为地址值相等那么相当于内容相等
        if (this == anObject) {
            return true;
        }
        //判断传入对象的类型是否为String类型
        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;
            }
        }
        return false;
    }

下面我们使用String重写的equals:

public static void main(String[] args) {
        BlogUser blogUser = new BlogUser();
        BlogUser blogUser1 = new BlogUser();
        System.out.println(blogUser.equals(blogUser1));
        String s1 = "123456";
        String s2 = "111111";
        String s3 = "123456";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
    }

结果如下:

false
false
true

可以看出String重写的equals方法是比较值是否相等,

总结

在基本数据类型中,使用==则是比较两个数据的值是否相等,而在对象中则是比较两个对象的地址值是否相等
使用Object.equals则是比较对象的地址值是否相等,而String.equals则是比较值是否相等.

如有错误,希望指出,谢谢