上节我们介绍过JDK源码-StringBuffer类
本节介绍Boolean类,Boolean是基本数据类型boolean的包装类,提供了一些常用的方法,比如String类型和boolean类型的转换。boolean的值只有两种,true或者false。
一、实现接口
Boolean类同时他实现了Serializable、Comparable接口,被定义为final,不能被继承,实现Comparable接口是为了方便在集合中进行比较,它需要实现的方法为compareTo。
public final class Boolean implements java.io.Serializable, Comparable<Boolean>
二、成员变量
既然是对基本类型boolean的封装,那必然要有一个变量来保存boolean的值,即value,而且它被声明为final,表明它是不可变的。
对于布尔值也就只有两种状态,我们其实可以仅仅用两个对象就表示所有的布尔值,在Java的世界中只要全局存在两个Boolean对象即TRUE和FALSE,实例化出多余的Boolean对象也能正确表示布尔值,只是会浪费一些空间和影响时间性能。
private final boolean value;
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
@SuppressWarnings("unchecked")
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
三、构造方法
Boolean类的两种构造函数可分别传入boolean和String类型,对于String类型的值会进行”parseBoolean”解析,即当传入的字符串忽略大小写等于”true”时判断为true,否则为false。
但是一般不推荐直接用构造函数来实例化Boolean对象,它只是会浪费一些空间和影响时间性能。推荐的形式是Boolean.TRUE或Boolean.valueOf(true)或Boolean.valueOf(“true”),避免生成不必要的对象。
public Boolean(boolean value) {
this.value = value;
}
public Boolean(String s) {
this(parseBoolean(s));
}
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
四、常用方法
1、booleanValue()
返回此对象的布尔值。
public boolean booleanValue() {
return value;
}
2、valueOf
valueOf方法可分别传入boolean和String类型,用于返回Boolean对象
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE;
}
3、toString
可传入boolean类型或不传,返回字符串true或false
public static String toString(boolean b) {
return b ? "true" : "false";
}
public String toString() {
return value ? "true" : "false";
}
4、hashCode
可传入boolean类型或不传,传入boolean类型true时返回1231,false返回1237。不传时会调用此对象的Boolean.hashCode。
@Override
public int hashCode() {
return Boolean.hashCode(value);
}
public static int hashCode(boolean value) {
return value ? 1231 : 1237;
}
5、equals(Object obj)
先判断对象是否是Boolean类型,如果是再比较它们的值是否相等,否直接返回false
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
6、getBoolean(String name)
根据给定的名称查询系统中是否存在该属性,如果存在且为true则返回true,否则返回false。根据程序需要可以提前设置一些系统属性,使用System.getProperty(name)获取设置的系统属性。
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = parseBoolean(System.getProperty(name));
} catch (IllegalArgumentException | NullPointerException e) {
}
return result;
}
7、compare
compareTo是实现的Comparable接口中的方法调用了compare方法,该方法返回0表示本对象与传入的对象相等,返回正数表示本对象比传入的对象大,返回负数表示本对象比传入的对象小。
compare用于比较两个布尔值的大小,true大于false,如果相等返回0,如果不等当x为true,y为false时返回1,否则返回-1。
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);
}
8、逻辑运算
logicalAnd、logicalOr和logicalXor用于实现三种逻辑运算
public static boolean logicalAnd(boolean a, boolean b) {
return a && b;
}
public static boolean logicalOr(boolean a, boolean b) {
return a || b;
}
public static boolean logicalXor(boolean a, boolean b) {
return a ^ b;
}