==和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方法来定义比较规则,否则就是按照==进行比较。

相关推荐
それども2 小时前
JVM MetaspaceSize 参数作用
jvm
M-Robots echo4 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~4 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
数模竞赛Paid answer4 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆5 小时前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划
mldong5 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe6 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一516 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
想吃火锅10056 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
gugucoding6 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言