千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

首页 视频教程 培训课程 师资团队 技术干货 常见问题 面试题 职场就业 零基础学Java 行业资讯
【热点话题】 Java技术干货 Java学习教程 Java学习笔记 Java面试题 Java培训问答 Java培训机构哪些好 Java职场就业
当前位置:Java培训  >  java技术干货  >  equals和== 的区别是什么

equals和== 的区别是什么

来源:千锋教育
发布人:qyf
时间: 2022-06-07 17:50:00 1654595400

java培训

  在面试时,问基础问题时,80%的机率会问到equals和== 的区别是什么,

  当看到这样题的时候大家肯定觉的是送分题,既然送分题,那么你要回答出点不一样东西才行:正式进入面试环节(声音)

  答:您好,我是来面试的

  面:好,那咱们开始。equals和== 的区别是什么

  答:equals是比较两个对象的值是否相同,==是运算操作符,比较两个基本数据类型的值是否相等,如果比较两个对象,那么比较的是两个对象的地址。

  面:如果你是这样回答面试官的话,虽然回答的没毛病,但是太肤浅,那正确的打开方式应该是什么呢?

  一、对象类型不同

  equals():是超类Object中的方法。

  == :是操作符

  二、 比较的对象不同

  equals():用来检测俩个对象是否相等,即俩个对象的内容是否相等。

  == :用与比较引用和比较基本数据类型时具有不同的功能,具体如下:

  (1)、基础数据类型:比较的他们的值是否相等,比如咱们常用int的变量,比较的是变量的值是否一样。

  (2)、引用数据类型:比较的是引用的地址是否相同,比如说新建了俩个对象,比较的是俩个对象的地址是否一样。

  三、 运行速度不同

  equals():没有==运行速度快。

  == :运行速度比equals()快,因为==只是比较引用

  面:回答到这里你已经比很多强了,但是我们其实没有回答根源,所谓根源是什么,就是你依据在哪里,那么我们可以在扩展点,说一说equals()跟==源码jdk中定义,我们可以看到,由equals的源码可以看出这里定义的equals与==其实是等效的,(object类中的equals() 跟==没有什么区别),真的大厂面试需要回答这部分东西,不同原因就在于有些类像Stirng、Integer等类对equals进行了重写,但是没有对equals进行重写的类就只能从Object类中继承equals方法,其实equals方法跟==是等效的

  如果你还想回答更好的,那么你可以说在工作中equals需要注意:

  自反性,对称性,传递性,一致性,非空性。

  而==需要知道是:

  比较操作符俩边是否同一个对象

  俩边操作必须是同一类型(可以父子类之间)才能编译通过

  好了,我敢肯定没有在比你回答的完美的了。

 public class test1 {

     public static void main(String[] args) {

         String a = new String("ab"); // a 为一个引用

         String b = new String("ab"); // b为另一个引用,对象的内容一样

         String aa = "ab"; // 放在常量池中

         String bb = "ab"; // 从常量池中查找

         if (aa == bb) // true

            System.out.println("aa==bb");

         if (a == b) // false,非同一对象

            System.out.println("a==b");

         if (a.equals(b)) // true

            System.out.println("aEQb");

         if (42 == 42.0) { // true

             System.out.println("true");

         }

     }

 }

例如String类对equals的重写

public boolean equals(Object anObject) {

     if (this == anObject) {

         return true;

     }

     if (anObject instanceof String) {

         String anotherString = (String)anObject;

         int n = count;

         if (n == anotherString.count) {

         char v1[] = value;

         char v2[] = anotherString.value;

         int i = offset;

         int j = anotherString.offset;

         while (n-- != 0) {

             if (v1[i++] != v2[j++])

             return false;

         }

         return true;

         }

     }

     return false;

     }

  三、其他注意提醒项

  1、==比较时,两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过

  2、对任意引用值X,x.equals(x)的返回值一定为true

  3、任何非空的引用值X,x.equals(null)的返回值一定为false 。

  更多关于“Java培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的好程序员班,高品质课程助理你实现java程序员梦想。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>