欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK源码-Boolean类

程序员文章站 2022-07-14 17:28:08
...

上节我们介绍过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;
    }