Java中==和equals的区别

目录

一、Java中的数据类型

1. 基本数据类型

2.引用数据类型

二、==和equals的区别

1. ==就是比较存储的值,

2. equals方法只用引用类型才有


相信很多小伙伴们或多或少都会有一点搞不清楚==和equals到底是比较的值还是地址。今天我们来区分一下,在Java中==和equals到底有什么区别。在弄清楚这个问题之前,我们先来学习一些前置知识。


一、Java中的数据类型

在java中数据分为基本数据类型和引用数据类型

1. 基本数据类型

java有八大基本数据类型,分别是byte、char、int、short、long、double、float、boolean

(注意:byte占一个字节,char占两个字节 和C语言略有不同

对于基本数据类型,各自都有其包装类(是引用数据类型);

对于引用类型,不初始化默认为null,基本数据类型默认为0;

2.引用数据类型

数组、接口、自定义对象以及String都是引用数据类型,引用数据类型存储的是地址。

二、==和equals的区别

先说结论

对于基本数据类型,==比较值

对于引用数据类型,==比较地址,equals重写则比较值,不重写则比较地址

1. ==就是比较存储的值,

基本数据类型存储的就是值,所以比较的就是值;

引用数据类型存储的是地址,所以比较的就是地址。

2. equals方法只用引用类型才有

我们看一下equals的源码

 * Compares this string to the specified object.  The result is {@code
     * true} if and only if the argument is not {@code null} and is a {@code
     * String} object that represents the same sequence of characters as this
     * object.
     *
     * @param  anObject
     *         The object to compare this {@code String} against
     *
     * @return  {@code true} if the given object represents a {@code String}
     *          equivalent to this string, {@code false} otherwise
     *
     * @see  #compareTo(String)
     * @see  #equalsIgnoreCase(String)
     */
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return 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;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

我们发现equals的源码就是用==来写的,所以不重写equals方法的话,equals和==完全一致,但是重写equals方法的话,就是比较值了。


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值