关于 ==
- 当使用 == 判断两个主数据类型(byte,int,double … )的变量时, == 号判断的是两个变量的值是否相等。
- 当使用 == 判断除了两个引用类型的两个变量时, == 号判断的是两个引用变量所指向的地址是否相等。
关于 equals()
- equals()方法是超类Object的一个方法(),所有JAVA的类都继承于Object,意味着所有JAVA的类都有equals()这个方法,所以equals()方法不用于比较主数据类型,而是比较引用类型的。
- Object类型定义equals()方法比较的是两个引用所指向的地址,所以如果一个类没有重写equals()方法,使用equals()方法的就是比较两个引用所指向的对象的地址。
- 如果自定义的类要比较两个该类对象的属性是否相等,一般会重写equals()方法。Java的封装比如String重写了equals()这个方法,使得equals()比较的是字符串内容而不是地址,又比如Integer封装类比较的是值也不是地址。
注意
尽管一些著名的java书籍说明java的字符串常量的创建规则是内存中有则指向,无则新建,但是实际应用中实在是难以保证两个字符串在java虚拟机中的地址是同一个,所以,还是用equals()比较字符串吧!