Java源码学习笔记之lang包——基本类型Boolean

前言:本文为本人第一次写博客,为学习所发现而记录。

            JDK 版本:1.8

在去除所有方法和静态变量之后,以下为核心内容。

public final class Boolean implements java.io.Serializable,Comparable<Boolean>{
    private final boolean value;
}

发现此class仅持有一个final boolean的变量。所以Boolean类的实例是无法被修改的,也就是说所有的修改之后的实例对象都不再是原来的对象。

于此同时作者(Arthur van Hoff)采用了两个实例去封装了boolean的唯二的两种状态,也就是true和false。

public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);

为了保证实例本身不会被改变所以将 value 定义为 final 。而这两个Boolean对象引用也在Class Loader装载时就被实例,并且申明为final,不能再指向其他实例。

那么这样做有什么好处呢?

提供这两个静态变量是为了让开发者直接使用这两个变量而不是每次都new一个Boolean,这样既节省内存又避免了创建一个新实例的时间开销。

我们就可以还通过以下的两个方法使用到作者为我们精心准备的实例方法。

Boolean b = Boolean.TRUE;

Boolean b = Boolean.valueOf(var);

以下是valueof 方法的具体实现:

public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}
总结:

如果一个类只有有限的几种状态,考虑用几个final的静态变量来表示不同状态的实例。例如编写一个Weekday类,状态只有7个,就不要让用户写new Weekday(1),直接提供Weekday.MONDAY即可,甚至把Weekday的引用直接指向我们已经申明完成的实例。

要防止用户使用new生成实例,就取消public构造方法,用户要获得静态实例的引用有两个方法:如果申明了public static var,就可以直接访问,比如Boolean.TRUE,第二个方法是通过静态工厂方法:Boolean.valueOf(?)。


本文部分内容参考自

https://blog.csdn.net/hxqneuq2012/article/details/52398801

猜你喜欢

转载自blog.csdn.net/qq_36144187/article/details/80609753