Boolean是Java中boolean基础类型的包装类,Boolean内部定义compareTo方法,用户包装类型的比较。因为两个包装类型如果直接使用==比较时,即使两个包装类变量的值相等,但是其结果也是false,因为包装类直接==,判断的是内存地址是否相等。
看代码:
public static void main(String[] args) {
Boolean a = new Boolean(true);
Boolean b = new Boolean(false);
System.out.println(a == true);
System.out.println(a == b);
/* 输出
true
false
*/
}
我们平时在比较布尔类型的时候,很多时候是一个布尔类型的包装类,一个基础布尔类型的变量比较,此时java自定进行拆箱,然后比较,也就是把布尔的包装类中的布尔值,拿出来和基础布尔类型比较,所以这种方式比较得到的结果是正确的。
看代码:
public static void main(String[] args) {
Boolean a = new Boolean(true);
Boolean b = new Boolean(false);
boolean d = true;
System.out.println(a == true);
System.out.println(a == d);
/* 输出
true
true
*/
}
如果是两个布尔类型的包装类要比较,直接用==,结果就会是false,原因我们上面已经说过了,此时就需要使用compareTo方法。
看代码:
public static void main(String[] args) {
Boolean a = new Boolean(true);
Boolean b = new Boolean(false);
Boolean c = new Boolean(true);
/** compareTo方法 */
System.out.println(Boolean.valueOf(a) + "===" + Boolean.valueOf(b));
System.out.println(a.compareTo(b));
System.out.println(a.compareTo(c));
System.out.println(b.compareTo(a));
/*输出
true===false
1
0
-1
*/
}
方法比较会返回3个结果,0,1,-1,看源码:
/* compareTo对比的逻辑 */
public int compareTo(Boolean b) {
//先把对象中的布尔值取出来,再进行比较
return compare(this.value, b.value);
}
public static int compare(boolean x, boolean y) {
return (x == y) ? 0 : (x ? 1 : -1);
}
相等:0
第一个值true:1
第一个值false:-1
方法compare方法的用法和compareTo是一样的,区别在于compare是静态方法,可以直接Boolean.compare(a,b)来使用。
看代码:
/** compare方法 */
System.out.println(Boolean.valueOf(a) + "===" + Boolean.valueOf(b));
System.out.println(Boolean.compare(a,b));
System.out.println(Boolean.compare(a,c));
System.out.println(Boolean.compare(b,a));
/* 输出
true===false
1
0
-1
*/