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

相关推荐
文丑颜不良啊42 分钟前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang2 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪2 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息3 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼3 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff4 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff5 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
武子康5 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
SL_staff6 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品