equals与 == 的区别

初学Java的人(me),有很长一段时间对equals()这个方法感到很懊恼,实在是弄不明白到底何时比较的是地址,又什么时候比较内容呢?因为要找工作,要面试。本人通过查阅很多前辈的博客,也记载了很多笔记,死记硬背的去记住在Object下比较的是地址,在String类下比较的是值。但是,碰到了StringBuffer,就又不知道比较的是什么了?所以,痛定思痛,查看源代码,揭开迷雾。

1. 首先,我们要知道equals()方法是定义在Object类下的方法,但是java所有的类都间接或直接的继承自Object类。所以,根据java的继承原理,所有的类都有equals()这个方法。那么,我们作为开发人员甚至是JDK的编写人员是否重写了equals()这个方法,对我们来说尤为重要。

让我们来看看Object类下的equals()方法吧。

  

我们通过Outline看到了Object类中的所有方法,点击进入equals()这个方法,看看源代码。

所以,结果一目了然。

2.看看String类的equals()方法

有一个instanceof 运算符,进行类型检查(是否属于String这个类,或者是否是String类的派生类),如果不是,则退出if语句,return false。否则,将传入的Object转换为String类型,然后采用一个char数组,通过while循环挨个比较每个字符是否一致,若一致,返回true。否则返回false。

3.看看包装类,例如Integer

但是,基本类型包装类还有一点需要大家注意的,就是缓存机制,

如果传入的值是(-128,127)直接的数字,不论是传入int还是Integer在JDK5之后都会自动包装。所以,都会缓存到IntegerCache.cache中,并返回同一个对象。

equals与==号的区别?的更多相关文章

  1. java中equals与==号的区别

    1.==号对于基本数据类型来说,比较的是值,对于引用数据类型来说比较的是地址值 2.equals方法在object类中,比较的是地址值,但是String类重写了Object类中的equals方法,所以 ...

  2. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  3. Java == ,equals 和 hashcode 的区别和联系(阿里面试)

    今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中 ...

  4. android 判断字符串是否为空与比对["=="与equals()的区别]

    if (s == null || s.equals("")) ; } s.equals("")里面是要比对的字符串 声明字符串未赋初始值或值,然后比对就会出错, ...

  5. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  6. equals方法和==的区别

    equals方法和==的区别   首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = &quo ...

  7. Java中BigDecimal的equals与compareTo的区别

          有个是否为零的判断[BigDecimal.ZERO.equals(ratio)]我用了BigDecimal的equals方法,结果,判断失败,因此特地分析一下equals与compareT ...

  8. Java易混小知识——equals方法和==的区别

    一.equals方法和==的区别 1.equals是String对象的方法,可以通过".“调用. 2.== 是一个运算符. 二.常用的比较用法 1.基本数据类型比较. equals和==都比 ...

  9. equals与hashCode的区别

    equals与hashCode的区别 1.类中的equals方法是一定要重写/覆盖(Override)的,因为要让它按照设计的需求来根据特征值判断等价性. 这里的特征值,就是String类型的name ...

随机推荐

  1. mysql有多条记录的单个字段想存为一个字段显示的方法

    SELECT po.id,(SELECT GROUP_CONCAT(mr.member_type) as memberTypeList FROM prod_offer_member_rel mr WH ...

  2. tomcat使用cookies缓存的时候中文报错解决办法 java.lang.IllegalArgumentException: Control character in cookie value or attribute.

    报错出现 java.lang.IllegalArgumentException: Control character in cookie value or attribute. at org.apac ...

  3. Hibernate学习(四)get和Load比较

    package cn.lonecloud.test.crud; import org.hibernate.HibernateException; import org.hibernate.Sessio ...

  4. 简单了解下OSI七层模型的作用以及常见网络协议含义和所用端口

    OSI七层模型及每层的作用 包括:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层物理层用来建立.维护.断开物理连接数据链路层建立逻辑链接.进行硬件地址寻址.差错校验等功能网络层进行逻辑地址 ...

  5. elasticsearch red status fix 红色状态修复

    问题描述: spring cloud项目有用到elasticsearch,启动时进行健康校验,发现es一直是down的,导致在eureka显示也是down 问题定位:查看actuator源码发现,如果 ...

  6. java遍历的优化

    说明:这是在面试中面试官出的题.虽然是常见的优化问题,但这种经验的确很有用.感慨之余,分享出来,以此共勉. 场景:现有List<PersonA>,List<PersonB>,P ...

  7. Linux socket网络编程基础 tcp和udp

    Socket TCP网络通信编程 首先,服务器端需要做以下准备工作: (1)调用socket()函数.建立socket对象,指定通信协议. (2)调用bind()函数.将创建的socket对象与当前主 ...

  8. <CEPH中国-深圳站-技术交流会演讲PPT> YY云平台Ceph Block应用实践 & 我写的书 《CEPH实战》

    YY云平台Ceph Block应用实践 http://s3.yyclouds.com/public/YY%E4%BA%91%E5%B9%B3%E5%8F%B0Ceph%E5%AE%9E%E8%B7%B ...

  9. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 修正uboot网络不可用

    通过使用uboot的网络功能可以更新ubook,烧写内核,文件系统,如果网络功能不可能,那还不如同变砖了一样.当然如果支持sd卡启动,可能通过sd卡完成这些功能,但是也太过麻烦了.飞凌的6410开发板 ...