Java中==与equals的区别

Posted Ferron Zhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中==与equals的区别相关的知识,希望对你有一定的参考价值。

1、数据类型

谈论==equal的区别之前,我们先来回顾一下Java中的基本数据类型和引用数据类型。

基本数据类型:Java中包括八种基本数据类型,分别为char,byte,short,int,long,float,double,boolean。

引用数据类型:引用类型包括三种,分别为类(class),接口(interface),数组(array),其中我们经常听到的Object,String,Date,Integer这些都属于类这种引用类型。

2、区别

  • 如果是用于基本数据类型的比较,则只能用==,而不能用equals,因为比较的数据类型是基本数据类型,它们没有equals()方法的实现,因此他们的比较只能用==来实现,==比较的是他们的值是否相等。
  • 如果是用于引用数据类型的比较,不同情况下也有不同的结果。我们这里针对于类这种引用数据类型来说,所有的类都继承一个公共的父类Object,而该父类里面定义的比较方法为equals。但是,Object类里面的equals方法默认比较的结果是内存地址,而不是值,因此该方法返回的结果与==的结果相同。因此,这里判断==equals的区别就变成了判断equals的具体实现是否用==来实现。
    • StringIntegerDate这些类来说,这些类在继承了Object之后,重写了父类的equals方法,因此这些引用数据类型使用==比较时,比较的是对象的内存地址,而使用equals方法比较时,则比较的是对象的值。
    • 对于StringBuffer或者一些自定义的类,这些类没有重写覆盖父类Objectequals方法,因此这些对象使用==equals返回的结果是一样,因为equals的实现方式就是使用==来实现的。
    • 还有一个关于字符串缓冲池的概念,程序会在运行的时候创建一个字符串缓冲池,来存放一些创建的字符串。如果你同时定义了两个相同的字符串,并且没有进行new操作,则在定义第二个字符串的时候,会将第二个字符串的内存地址指向第一个相同的字符串,而不会再创建一个新对象。此时==equals操作返回结果相同;而当第二个字符串进行了new操作,创建第二个字符串时会新建一个字符串,此时==equals返回的结果不相同。

以上是关于Java中==与equals的区别的主要内容,如果未能解决你的问题,请参考以下文章

Java中“==”与equals方法的区别

Java中==与equals的区别

java中equals和equalsignorecase的区别

java中equals和equalsignorecase的区别

java中equals与==号的区别

Java中==与equals()的区别