一. 类继承
Boolean 的源码类定义部分如下:
- public final class Boolean implements java.io.Serializable,
- Comparable<Boolean>
在 IDEA 生成其类继承图:
根据以上信息可以得知:
1.Boolean 类实现了 java.io.Serializable 接口, 众所周知, 这是实现对象序列化的功能.
2.Boolean 类实现了 Comparable<Boolean > 接口.
那么问题来了?
这个 Comparable<Boolean > 接口是什么东西呢?
看起来是否很眼熟, 是否曾在瀚海代码量里偶然一瞥过?
若你在字符串里用过 str.compareTo(str2) 来做过比较排序话, 那你一定多少有点印象, 其实 Java 中的所有 compareTo 方法都来源于一个共同的祖先, 即 Comparable 接口.
Boolean 类同样继承是这个 Comparable 接口, 它的源代码很简单, 就只定义了一个方法:
- public interface Comparable<T> {
- public int compareTo(T o);
- }
继承该接口的类, 都可通过 compareTo 方法来对类对象进行排序. 该方法将对象与指定对象的顺序做比较, 若对象大于, 等于或小于指定对象, 将分别返回 1,0,-1,
推而论之, 你也可以由此而明白 str.compareTo(str2) 底层的继承原理了.
二. 类结构
Boolean 源码定义了以下的字段与方法, 下面将逐一学习分析:
Boolean 类包含以下属性:
- 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");
- private final boolean value;
- // 用于 Java 序列化机制, 在序列化与反序列过程中, 用于判断反序列化文件与该类是否同一版本, 若同可反序列化成功.
- private static final long serialVersionUID = -3665804199014368530L;
说明:
1.TRUE 与 FALSE 是 Boolean 提供的两个静态常量, 在用到 true 或者 false 时, 可直接用这两个常量, 无需再耗费资源来创建类似 new Boolean(true) 这样的新实例;
2.TYPE 基本类型 boolean 的 Class 对象, 可用于类反射;
3.value 是一个 final 定义的私有变量, 即
- public Boolean(boolean value) {
- this.value = value;
- }
- public Boolean(String s) {
- this(parseBoolean(s));
- }
第一个比较好理解, 那第二个的 parseBoolean(s) 是什么方法呢?
跟踪进去看, 在该方法里, 会将 String 字符串做比较, 只有 s 为 "true" 时传进去, 才会返回一个 boolean 值.
- public static boolean parseBoolean(String s) {
- return ((s != null) && s.equalsIgnoreCase("true"));
- }
Boolean 的 hash 值是比较有意思:
- @Override
- public int hashCode() {
- return Boolean.hashCode(value);
- }
当 true 时, 得到的是 1231, 当 false, 得到的是 1237.
- public static int hashCode(boolean value) {
- return value ? 1231 : 1237;
- }
那么, 问题来了, 为啥 Boolean 的 hash 值为什么选择这两个数字呢?
主要原因是, 1231 与 1237 是比较大的素数, 而选择素数是为了在散列桶中最好地分配数据, 其实 Boolean 也可以选择其他素数作为其哈希值, 据说这纯粹是作者的个人喜好.
有个有趣的地方是, 当
true: 1231 => 1 + 2 + 3 + 1 = 7;
7 - 是欧洲传统中的幸运数字;
false: 1237 => 1 + 2 + 3 + 7 = 13;
13 则是不吉祥的数字;
来源: https://www.cnblogs.com/zhujiqian/p/13417083.html