原创 Java基础"=="和equals方法究竟有什么区别?
2021-12-09 11:44:50
Java基本原理"=="和equals方法的区别是什么?分别将一件事说清楚,然后说清楚另一件事,这样,两者的区别自然就会出来,混用起来说,这就很难说明==运算符是用来比较两个变量的值是否相等的。也就是说,用来比较该变量在存储器中的值是否相同,只使用==运算符来比较两个基本类型的数据或两个引用变量是否相等。
若变量所指向的数据是对象类型的,此时就涉及到两个内存块,该对象本身将占用一块内存(堆内存),变数还占用一块内存,比如Objetobj=newObject();变量obj是内存,newObject()是另一个存储器,此时,存储在变量obj的内存中的数值就是该对象所占用的那个内存的初始地址。对一个对象类型的变量来说,如果想比较两个变量是否指向同一对象,也就是,看看这两个变量对应的内存中的数值是否相等,此时需要用==运算符来比较。
equals方法是用来比较两个独立的对象是否一样,就像去比较两个外表是否一样,它比较两个物体是独立的。以以下代码为例:
stringa=newString("foo");
Stringb=newString("foo");
2条new语句会创建两个对象,并使用a,b这两个变量分别指向它们中的一个,即两个不同的对象。这两种方法的初始地址不同,也就是a和b中存储的数值不同,因此表达式a==b返回false,而且,这两个对象的内容是相同的,因此表达式a.equals(b)将返回true。
实际上,我们常常需要比较传递所进行的字符串的内容是否相同,比如,Stringinput=…;input.equals("quit")很多人在用==做比较时不小心,这是错误的,随便从网上找几个实战教学视频看看,其中包含了许多此类错误。请记住,对字符串进行比较主要使用equals方法。
若类本身不定义equals方法,则会从Object的equals方法继承,该方法的实现代码如下:
实现Object类的equals方法。
它表明了一个类本身不定义equals方法,其缺省equals方法(继承自Object类)使用==运算符,还可以用来比较两个变量所指向的对象是否相同,此时使用equals并使用==得到相同的结果。当两个单独的对象进行比较时,返回总false。假如您写的类想要比较。
这个类创建的两个实例对象的内容是否相同,那么您必须覆盖equals方法,并且您需要自己编写代码以确定两个对象的内容是相同的。