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

相关推荐
天天摸鱼的java工程师3 分钟前
八年 Java 开发手敲:SpringBoot+SpringSecurity+JWT 实战,前后分离权限注解落地就能跑
java·后端
冰淇淋@5 分钟前
idea启动项目报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
techzhi7 分钟前
this view is read-only (IntelliJ IDEA)
java·ide·intellij-idea
编程学委8 分钟前
Idea(2023版)使用Svn
java·svn·intellij-idea
qianbailiulimeng9 分钟前
IDEA + Spring Boot 的三种热加载方案
java·后端
王元_SmallA9 分钟前
网卡驱动架构以及源码分析
java·后端
2301_8079973817 分钟前
代码随想录-day26
数据结构·c++·算法·leetcode
零基础的修炼18 分钟前
Linux---序列化与反序列化
java·开发语言
敲代码的嘎仔25 分钟前
JavaWeb零基础学习Day6——JDBC
java·开发语言·sql·学习·spring·单元测试·maven
闭着眼睛学算法26 分钟前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od