我们比较equals和==的区别可以进行分类讨论
1.基本数据类型
- 什么是基本数据类型:Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。
- 只能用==进行比较
- 比较的是它们的值(这里可以粗略认为,实际上是指向常量池地址值)
2.引用数据类型
- 当用==进行比较时,比较的是内存地址值
- 当用equals进行比较时,如果调用此方法的类未重写equals方法,则引用Object.equals()方法,源码如下:
也就是此时equals等效于==。 - 所以对比此两者的区别,需要注意equals是否被重写。例如:String类就重写了equals,源码如下:
我们不难看到: - 先对内存地址值进行比较,如果不相等,则进行下一步。
- 当比较的是另一个字符串时,比较字符串的长度是否相等,如果不相等,则进行下一步。
- 如果相等则机继续将字符串拆分的每个char的值来比较是否相等,也就是比较的是字符串整体值是否相等。