==和equals的区别

目录

== 比较的是栈中的值

==其实是比较的栈中的值;

基本数据类型比较的是数值

引用类型比较的是堆内存中的对象地址

Object中的equals就是用==比较

下面的代码就是Object类的源码;

所以如果我们调用了Object中的equals方法进行比较,又没有进行重写,其实就相当于使用==进行比较。

java 复制代码
	public boolean equals(Object obj) {
        return (this == obj);
    }

平时用到的equals都是经过了重写的

我们平时用到最多的应该就是String类的equals方法;

下面是源码:

java 复制代码
	public boolean equals(Object anObject) {
		//引用地址相等,说明是一个对象,直接返回true
        if (this == anObject) {
            return true;
        }
        //判断是不是String,不是String的话肯定不会和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;
    }

如上,我们之所以平时觉得equals是代表值相等,就是String默默重写了equals方法,从而让我们产生了错觉。

所以,如果我们自定义的对象要做比较,需要重写equals方法来定义比较规则,否则就是按照==进行比较。

相关推荐
运筹vivo@1 分钟前
3043. 最长公共前缀的长度(Leetcode 每日一题)
c++·算法·leetcode·职场和发展·每日一题
Mahir081 分钟前
Spring Boot 自动装配深度解密:从原理到自定义 Starter 实战
java·spring boot·后端·自动装配·自定义starter·大厂面试题
淘源码d2 分钟前
产科系统源码,数字产科源码,Java(后端) + Vue + ElementUI(前端) + MySQL(数据库),确保系统稳定性与扩展性。
java·源码·数字产科·产科系统·智能化孕产服务·高危五色预警·智慧产科
wand codemonkey1 小时前
SpringbootWeb【入门】+MySQL【安装】+【DataDrip安装 】+【连接MySQL】
java·mysql·mybatis
Mahir089 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit10 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码10 小时前
C++ 内存分区 堆区
java·开发语言·c++
心中有国也有家10 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事11 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海11 小时前
C# 隐式转换深度解析
java·开发语言·c#