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

相关推荐
努力努力再努力wz5 分钟前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz7 分钟前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
tjc199010058 分钟前
golang如何使用t.Cleanup清理测试_golang t.Cleanup测试清理使用策略
jvm·数据库·python
LaLaLa_OvO12 分钟前
mybatis 引用静态常量
java·mybatis
小糖学代码14 分钟前
LLM系列:2.pytorch入门:3.基本优化思想与最小二乘法
人工智能·python·算法·机器学习·ai·数据挖掘·最小二乘法
Han_han91916 分钟前
常用API:
java·开发语言
爱写代码的倒霉蛋17 分钟前
天梯赛备赛经验分享(基础版)
经验分享·算法
214396520 分钟前
如何提升SQL数据更新的安全性_使用行级锁与悲观锁机制
jvm·数据库·python
小锋java123428 分钟前
LangChain4j 来了,Java AI智能体开发再次起飞。。。
java·人工智能·后端
f3iiish31 分钟前
2078. 两栋颜色不同且距离最远的房子 力扣
算法·leetcode