一、简单类型比较
Java中,比较简单类型变量仅能用“==”,只要两个简单类型值相等即返回ture,否则返回false;
二、引用类型比较
引用类型比较即可以用"==",也可以用“equals()”来比较。
equals()方法来自于Object类,每个自定义的类都可以重写这个方法。Object类中的equals()方法仅仅通过“==”来比较两个对象是否相等。
在用“==”比较引用类型时,仅当两个应用变量的对象指向同一个对象时,才返回ture。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、Boolean、BigDecimal、BigInteger等等,具体可以查看API中类的equals()方法,就知道了。
其中特殊对象是Boolean类。特殊点在于Boolean对象创建方法。其实Boolean类的对象最多有两个,其toString()值分别是true和false。当且仅当用true或者"true"创建的Boolean类为同一个对象且toString()值为true。其他的字符串或者false创建的Boolean对象的值一律相等且toString()值为false。
三、总结
- “==”比较对象是否引用了同一个对象,或者比较简单类型变量值是否相等。
- Object类的equals()方法用来比较是否一个对象(内存地址比较),可以重写。
JDK中有些类重写了equals()方法,只要类型、内容都相同,就认为相等。 - 很变态的Boolean类,仅存在两个实例。具体可查看API。
- 一般来说,一个类如果涉及到比较,应该重写equals()方法,因为内存地址比较没有意义。