本文已参与「新人创作礼」活动,一起开启掘金创作之路。
==操作符与equals()方法
-
==操作符与equals()方法
-
==操作符
- 基本类型比较值:只要两个变量的值相等,即为true。例如:int a=1;if(a==6){……}
- 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true
- 注:使用“==”进行比较时,符号两边的数据类型必须兼容(可以自动转换的基本数据类型除外),否则编译出错
-
equals()
-
所有类都继承了Object,也就是得到了equals()方法。还可以重写。
- 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
- 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
-
特例:当用equals()方法进行比较时,对类File、String、Date及包装类(Wrapper Class)来说,是比较类的内容而不考虑引用是否是同一个对象;
- 原因:在这些类中重写了Object类的equals()方法。
- 原因:在这些类中重写了Object类的equals()方法。
-
-
总结
- 特殊的类:File、String、Date及包装类(Wrapper Class),使用==比较的是对象(对象的堆内存地址),equals比较的是内容\
- 除了特殊类之外的其他普通类:==和equals比较的都是对象(对象的堆内存地址)
- 如果想改变某个类的equals,重写即可
-
String对象的创建
-
String对象的创建
- 注:字面量创建对象的时候,只在常量池创建一个对象;new的时候,常量池有对象,堆中也有对象,字面量方法比new省内存
-
练习1
- 第一题:基本类型比较值只要两个变量的值相等,65=65.0,即为true
- 第二题:基本类型比较值只要两个变量的值相等,A的ASCII码为65,两个都是true
- 第三题:不相等,不是同一个对象
- 第四题:相等,String使用equals()方法是比较内容(值)
- 第五题:类不同,编译不通过
-
练习2
- 第一个输出true:两个都是字符串对象,equals比较值
- 第二个输出true:两个都是字面量赋值,引用字符串常量池的同一个字符串堆地址
- 第三个输出true:"atguigu"同样存储在字符串常量池,都是引用同一个地址
- 第四个输出false:两个是new创建的字符串,两个引用的不是同一个对象地址
-
练习3
- 第一题
- 第二题
- 第一题