当前位置: 代码网 > it编程>编程语言>Java > Java中equals和==的区别及使用场景,看完不再混淆

Java中equals和==的区别及使用场景,看完不再混淆

2026年09月03日 Java 我要评论
equals和==有什么区别?序equals和==有什么区别是面试中经常被问的问题,也是必须要掌握的基础知识,基础知识没有掌握,很难通过面试拿到理想的offer,今天让我们来一起学习一下 equals

equals和==有什么区别?

equals和==有什么区别是面试中经常被问的问题,也是必须要掌握的基础知识,基础知识没有掌握,很难通过面试拿到理想的offer,今天让我们来一起学习一下 equals和有什么区别吧!

基本概念

对于基本数据类型,==比较的是他们的值。基本数据类型没有equal方法;

对于引用数据类型,==比较的是它们的存放地址(是否是同一个对象)。equals()默认比较地址值,重写的话按照重写逻辑去比较。

这里提到提到了基本数据类型和引用数据类型

基本数据类型我们都知道java中的基本类型为 byte、short、int、long、float、double、boolean、char。这些类型的变量比较时,其实就是值的比较,这里要用==来比较 而不能用equals。

引用数据类型,像我们自己创建的类,还有基础类的包装类,string类等等这些类, == 比较的就是他们的地址。而equals()则是比较地址值。

看一下源码中object类的equals,发现是比较地址值。

public boolean equals(object obj) {
    return (this == obj);
}

像经典的integer,string类这些,其实equals方法都是被重写了。

integer比较的时候 要用equals。integer的equals源码如下,可以看见这里是取地址的值比较了。

public boolean equals(object obj) {
     if (obj instanceof integer) {
         return value == ((integer)obj).intvalue();
     }
     return false;
 }

string比较的时候 也要用equals,string的equals源码如下,可以看见这里的逻辑,如果是string类型并且长度相同,则比较数组中的每一位

public boolean equals(object anobject) {
		if (this == anobject) {
			return true;							//判断是否为同一对象
		}
		if (anobject instanceof string) {			//若当前传入的对象是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) {                //按照数组value中的每一位进行比较
					if (v1[i] != v2[i])                    
						return false;                      
					i++;                                   
				}                                          
				return true;                               
			}
		}
		return false;
	}

总结

因为 java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

equals()不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。

equals()方法存在于object类中,而object类是所有类的直接或间接父类,因此所有的类都有equals()方法。

关于值传递:

无论是基本数据类型还是引用数据类型。这是因为 java 中的所有数据类型都可以分为基本数据类型和引用数据类型,而方法调用时只会将变量的值复制一份传递给方法。

值传递使得代码更加简洁、安全,并且能够提高程序的执行效率

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com