Java中==和equals和区别详解+案例

一开始碰见==和equals我也是分不清,后来看了不少博客,收益匪浅,数组

担忧之后给忘了,因此写下这个,之后复习能够用。缓存

(有哪里写得不对的,但愿能够留言帮忙改进,你们一块儿共同进步)spa

1、Java数据类型一共分为两大类:基本数据类型、引用数据类型:code

  1.基本数据类型:对象

    整数型:blog

      整型:byte、short、int、long继承

     浮点型:float、double接口

    字符型:char字符串

    布尔型:boolean源码

  2.引用数据类型:

    数组、类、接口

2、基本数据类型的比较

   基本类型的比较只能用==比较,没办法用equals比较,没有该方法,包装类才有

  

3、基本类型和包装类型的比较

  装箱:int-->Integer,拆箱:Integer-->int

  1.基本型和包装型进行“==”运算符的比较,包装类型将会自动拆箱变为基本型后再进行比较

  2.关于equals的比较,咱们先看下它的源码

  这个是Object的equals源码,很明显是比较两个的地址是否同样

  

   下面这图是Integer建立时的源码,

         Integer a = 3;      //建立调用的是Integer类中的valueOf(int i )方法,当给的数值大于-128小于127返回的IntegerCache中缓存中的值,大于直接返回对象
         Integer b = new Integer(3);    /建立/调用了Integer的构造方法

    

  这个是Integer的equals,说明他重写了object的源码,他是先比较类型是否同样,

  若是类型不同直接返回false,若是类型同样,他会先进行拆箱后再比较。

   

  int和Integer的比较实例

    

4、String类型的比较

   1.String关于==的比较是看他的地址是否是同样,可是String他比较特殊,他有个字符串常量池,直接定义字符串(不是new的状况)

   他会先到字符串常量池看以前有没有,有就直接指向以前的。没有就建立(指的是new)。

   

    2.equals:由于String继承了Object的equals并重写了equals.看下面的源码,咱们能够看出来,他是先判断是否是同一对象,若是是直接返回true,

     若是不是他就比较内容是否一致。

    

    String比较实例

  

5、引用类型的比较

  引用类型的比较最直接不管是==仍是equals都是比较地址

  这是equals源码

   

   比较案例

    

相关文章
相关标签/搜索