Java源码学习笔记之lang包——包装类Boolean.class

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

            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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值