Java基础之 Boolean类型compareTo方法和compare方法解析

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
 */