equals与“==”操作符的比较

equals方法是Object类的一个方法,所有继承自Object类的类都会集成此方法,并且可以重载这个方法来实现各自的比较操作,而且jdk也正是推荐这种做法。所以开发人员尽可以在自己的类中实现自己的equals方法来完成自己特定的比较功能,所以各个类的equals方法与= =之间并没有绝对的关系,这要根据各自类中自己的实现情况来看。也就是说可能会有两种情况发生:equals方法和= =相同或者不相同。在多数情况下这两者的区别就是究竟是对对象的引用进行比较还是对对象的值进行比较(其他特殊情况此处不予考虑)。那么= =操作符是比较的什么呢?= =操作符是比较的对象的引用而不是对象的值。并且由下面的源代码可以看出在最初的Object对象中的equals方法是与= =操作符完成功能是相同的。

源码:

java.lang.Object.equals()方法:

-------------------------------------------------------------

public boolean equalss(Object obj) {
return (this = = obj);
}

-------------------------------------------------------------

jdk文档中给出如下解释:

-------------------------------------------------------------

The equalss method implements an equivalence relation:

? It is reflexive: for any reference value x, x.equalss(x) should return true.

? It is symmetric: for any reference values x and y, x.equalss(y) should return true if and only if y.equalss(x) returns true.

? It is transitive: for any reference values x, y, and z, if x.equalss(y) returns true and y.equalss(z) returns true, then x.equalss(z) should return true.

? It is consistent: for any reference values x and y, multiple invocations of x.equalss(y) consistently return true or consistently return false, provided no information used in equalss comparisons on the object is modified.

? For any non-null reference value x, x.equalss(null) should return false.

The equalss method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equals objects must have equals hash codes.

-------------------------------------------------------------

时间: 2024-09-29 10:40:42

equals与“==”操作符的比较的相关文章

C#中奇妙的操作符重载

C#中奇妙的操作符重载 细心的朋友可能发现,C#虽然可以重载操作符,但和C++比较起来,却有很大的不同.定义的时候重载操作符方法必须是static,而且至少有一个参数(一目和二目分别是一个和两个),C#和C++比起来,最重要的特征是:<.>:==.!=:true.false必须成对出现,即重载了"<"就必须重载">",重载了"=="就必须重载"!=",重载了"true"就必须重载&q

如何编写高质量equals方法

什么是equals方法 指示其他某个对象是否与此对象相等,equals方法存在Object类中,我们编写的类继承Object,可以覆盖Object的equals方法来实现我们的逻辑,去判断两个对象是否相等. Object类中的equals方法 一起来看看Object类中的源代码 public boolean equals(Object obj) { return (this == obj); } 我们可以观察到几点: equals方法是public修饰的,外部类是可以访问的 equals方法的返

Java:重写equals()和hashCode()

以下内容总结自<Effective Java>. 1.何时需要重写equals() 当一个类有自己特有的"逻辑相等"概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查"实参是否为正确的类型". [2]对于类中的每一个"关键域",检查实参中的域与当前对象中对应的域值. [2.1]对于非float和double类型的原语类型域,使用==比较: [2.2]对于对象引用域,递归调用equals方

第3章 操作符

Java中有关操作符的语法大多与C++中的类似,就不再重复说了,只说下其中特殊的地方. 1. String支持"+"和"+="操作.在进行"+"操作时,如果一个操作数是字符串,其他操作数自动转为字符串.但要注意运算顺序.例如下面两个输出是不一样的. System.out.println("ans"+2+3); System.out.println(2+3+"ans"); 2. "%"运算

关于==与equals()的比较例子

问题描述 关于==与equals()的比较例子 Vector vc1 = new Vector();Vector vc2 = new Vector(); System.out.println(vc1.getClass==vc2.getClass());//返回的是trueSystem.out.println(vc1.equals(vc2));//返回的是false 对于第一个输出的true表示有点不理解,能跟我解释一下么~! 解决方案 Vector vc1 = new Vector();Vect

从Java的堆栈到Equals和==的比较

认识Java中堆和栈 栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是

【LINQ技术】扩展特性和LINQ操作符

LINQ特有的编程结构 LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面. LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都为此做了许多工作,扩展了大量新的编程结构. 一.隐式类型本地变量 var--一个如此小巧的关键字却有着强大的力量. var varInt=1; var varBool=True; var varString="String, String, String"; Console.WriteLi

新手学JAVA(一)——Equals和“==”的区别

      一句话概括:     如果操作两边都是对象句柄,就比较两个句柄是否指向同一个对象.如果两边是基本类型,则比较的就是值.          ==不属于任何类,而equals则是任何类(Java中)的一个方法.     equals()是每个对象与生俱来的方法,因为所有类的最终基类就是Object(除去Object本身):而equals()是Object的方法之一.     我们可以这样比较:     1)Primitive1(基本类型)== Primitive2(基本类型)     2

Java中的==和equals区别

中软国际电子政务部Jeff Chi总结,转载请说明出处. 概述:        A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相同.        B.对于String a = "a"; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的.        C.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true).        D.一个类如果没有定义equa