一开始遇见 == 和 equals 我也是分不清,后来看了很多博客,收益匪浅,
担心以后给忘了,所以写下这个,以后复习可以用.
(有哪里写得不对的,希望可以留言帮忙改进, 大家一起共同进步)
一,Java 数据类型一共分为两大类:基本数据类型,引用数据类型:
1. 基本数据类型:
整数型:
整型:byte,short,int,long
浮点型:float,double
字符型:char
布尔型:boolean
2. 引用数据类型:
数组,类,接口
二,基本数据类型的比较
基本类型的比较只能用 == 比较,没办法用 equals 比较,没有该方法,包装类才有
三,基本类型和包装类型的比较
装箱:int-->Integer, 拆箱:Integer-->int
1.
基本型和基本型封装型进行 "==" 运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较
2. 关于 equals 的比较,我们先看下它的源码
这个是 Object 的 equals 源码,很明显是比较两个的地址是否一样
这个是 Integer 的 equals,说明他重写了 object 的源码,他是先比较类型是否一样,
如果类型不一样直接返回 false, 如果类型一样,他会先进行拆箱后再比较.
int 和 Integer 的比较实例
四,String 类型的比较
1.String 关于 == 的比较是看他的地址是不是一样,但是 String 他比较特殊,他有个字符串常量池,直接定义字符串(不是 new 的情况)
他会先到字符串常量池看之前有没有,有就直接指向之前的.没有就创建(指的是 new).
2.equals: 因为 String 继承了 Object 的 equals 并重写了 equals. 看下面的源码,我们可以看出来,他是先判断是不是同一对象,如果是直接返回 true,
如果不是他就比较内容是否一致.
String 比较实例
五,引用类型的比较
引用类型的比较最直接无论是 == 还是 equals 都是比较地址
这是 equals 源码
比较案例
来源: https://www.cnblogs.com/Fence-Zzy/p/8365187.html