网站建设百度云资源,网站建设流程效果,彩票的网站怎么做的,无锡工程建设信息网站原创/朱季谦
有天突发其想#xff0c;想看一下Boolean底层都做了些什么#xff0c;故而去看了一番Boolean的源码#xff0c;基于一些思考的基础上#xff0c;输出了这篇文章。 一.类继承
Boolean的源码类定义部分如下#xff1a; 1 public final class Boolean implemen…原创/朱季谦
有天突发其想想看一下Boolean底层都做了些什么故而去看了一番Boolean的源码基于一些思考的基础上输出了这篇文章。 一.类继承
Boolean的源码类定义部分如下 1 public final class Boolean implements java.io.Serializable,2 ComparableBoolean
在IDEA生成其类继承图 根据以上信息可以得知
1.Boolean类实现了java.io.Serializable接口众所周知这是实现对象序列化的功能。
2.Boolean类实现了ComparableBoolean接口。
那么问题来了
这个ComparableBoolean接口是什么东西呢
看起来是否很眼熟是否曾在瀚海代码量里偶然一瞥过
若你在字符串里用过str.compareTo(str2)来做过比较排序话那你一定多少有点印象其实Java中的所有compareTo方法都来源于一个共同的祖先即Comparable接口。
Boolean类同样继承是这个Comparable接口它的源代码很简单就只定义了一个方法 1 public interface ComparableT {2 public int compareTo(T o);3 }
继承该接口的类都可通过compareTo方法来对类对象进行排序。该方法将对象与指定对象的顺序做比较若对象大于、等于或小于指定对象将分别返回1,0-1
推而论之你也可以由此而明白str.compareTo(str2)底层的继承原理了。 二.类结构
Boolean源码定义了以下的字段与方法下面将逐一学习分析 Boolean类包含以下属性 1 public static final Boolean TRUE new Boolean(true);2 3 public static final Boolean FALSE new Boolean(false);4 5 6 SuppressWarnings(unchecked)7 public static final ClassBoolean TYPE (ClassBoolean) Class.getPrimitiveClass(boolean);8 9 10 private final boolean value;11 12 //用于Java序列化机制在序列化与反序列过程中用于判断反序列化文件与该类是否同一版本若同可反序列化成功。13 private static final long serialVersionUID -3665804199014368530L; 说明
1.TRUE与FALSE是Boolean提供的两个静态常量在用到true或者false时可直接用这两个常量无需再耗费资源来创建类似new Boolean(true)这样的新实例
2.TYPE 基本类型 boolean 的 Class 对象可用于类反射
3.value是一个final 定义的私有变量即 1 public Boolean(boolean value) {2 this.value value;3 }1 public Boolean(String s) {2 this(parseBoolean(s));3 }
第一个比较好理解那第二个的parseBoolean(s)是什么方法呢
跟踪进去看在该方法里会将String字符串做比较只有s为“true”时传进去才会返回一个boolean值。 1 public static boolean parseBoolean(String s) {2 return ((s ! null) s.equalsIgnoreCase(true));3 }
Boolean的hash值是比较有意思 1 Override2 public int hashCode() {3 return Boolean.hashCode(value);4 }
当true时得到的是1231当false得到的是1237。 1 public static int hashCode(boolean value) {2 return value ? 1231 : 1237;3 }
那么问题来了为啥Boolean的hash值为什么选择这两个数字呢
主要原因是1231与1237是比较大的素数而选择素数是为了在散列桶中最好地分配数据其实Boolean也可以选择其他素数作为其哈希值据说这纯粹是作者的个人喜好。
有个有趣的地方是当
true: 1231 1 2 3 1 7
7-是欧洲传统中的幸运数字
false: 1237 1 2 3 7 13
13则是不吉祥的数字