一 简介

boolean类型的封装类,将基本类型为boolean的值包装在一个对象中,实现序列化接口,和Comparable接口

额外提供了许多便捷方法,比较简单,直接贴代码分析

二 源码分析

    //true 和 false值的包装类实例
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); // Boolean类的class实例
@SuppressWarnings("unchecked")
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");//调用的native方法 // 此包装类的值
private final boolean value; private static final long serialVersionUID = -3665804199014368530L; //两个jdk9之后废弃的构造器,官方推荐使用 valueOf方法
@Deprecated(since="9")
public Boolean(boolean value) {
this.value = value;
} @Deprecated(since="9")
public Boolean(String s) {
this(parseBoolean(s));
} //只有传 'true' 返回true,其他都是false
public static boolean parseBoolean(String s) {
return "true".equalsIgnoreCase(s);
} //返回基本boolean类型值
@HotSpotIntrinsicCandidate
public boolean booleanValue() {
return value;
} // 根据参数返回Boolean对象实例
@HotSpotIntrinsicCandidate
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
} // 只有 "true" 为 true,其他全是false
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE;
} //返回boolean类型参数的字符串
public static String toString(boolean b) {
return b ? "true" : "false";
} // 返回此对象的值的字符串形式
public String toString() {
return value ? "true" : "false";
} @Override
public int hashCode() {
return Boolean.hashCode(value);
} /**
* hashCode,静态
* 真1231,假1237。这两个数是比较大的质数,也就是素数。
* 1.素数。假如将Boolean放入一个HashTable中,那么这两个数的共同因子就比较少,在求取hash时,那么出现相同hash值的概率就比较小。
* 2.为何选择如此大的素数。为什么不是2和3呢。如果选择了较小的素数,那么在求取hash的时候,可能出现分布不均的情况。
* 总之,就是为了在进行hash操作是尽量不冲突,并均匀。
*/
public static int hashCode(boolean value) {
return value ? 1231 : 1237;
} // 只有参数是Boolean类型,并且value相等,返回true,否则都是false
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
} /**
* 当且仅当以参数命名的系统属性存在,且等于 “true” 字符串时,才返回 true
* 比如设置了某个系统属性: System.setProperty(s1,"true"); 则改方法返回true
*/
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = parseBoolean(System.getProperty(name));
} catch (IllegalArgumentException | NullPointerException e) {
}
return result;
} //比较大小, true > false
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);
} /**
* 三个jdk1.8新增逻辑运算接口
*/
//求与
public static boolean logicalAnd(boolean a, boolean b) {
return a && b;
}
// 或
public static boolean logicalOr(boolean a, boolean b) {
return a || b;
}
//按位异或,二进制位相同则结果为0,不同则结果为1
public static boolean logicalXor(boolean a, boolean b) {
return a ^ b;
}

JDK源码之Boolean类分析的更多相关文章

  1. JDK源码之Integer类分析

    一 简介 Integer是int基本类型的包装类,同样继承了Number类,实现了Comparable接口,String类中的一些转化方法就使用了Integer类中的一些API,且fianl修饰不可继 ...

  2. JDK源码之Byte类分析

    一 简介 byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-2^7);最大值是127(2^ ...

  3. JDK源码之AbstractStringBuilder类分析

    一 概述 二 实现接口 AbstractStringBuilder实现了两个接口: Appendable 概述: Appendable的实现类的对象可以附加字符序列和值. 要追加的字符应该是Unico ...

  4. JDK源码之Double类&Float类分析

    一 概述 Double 类是基本类型double的包装类,fainl修饰,在对象中包装了一个基本类型double的值.Double继承了Number抽象类,具有了转化为基本double类型的功能. 此 ...

  5. JDK源码之String类解析

    一 概述 String由final修饰,是不可变类,即String对象也是不可变对象.这意味着当修改一个String对象的内容时,JVM不会改变原来的对象,而是生成一个新的String对象 主要考虑以 ...

  6. [Android FrameWork 6.0源码学习] LayoutInflater 类分析

    LayoutInflater是用来解析XML布局文件,然后生成对象的ViewTree的工具类.是这个工具类的存在,才能让我们写起Layout来那么省劲. 我们接下来进去刨析,看看里边的奥秘 //调用i ...

  7. jdk源码理解-String类

    String类的理解 简记录一下对于jdk的学习,做一下记录,会持续补充,不断学习,加油 1.String的hash值的计算方法. hash值的计算方法多种多样,jdk中String的计算方法如下,比 ...

  8. jdk源码阅读-Object类

    native 关键字 private static native void registerNatives(); static { registerNatives(); } public final ...

  9. 深入JDK源码之Arrays类中的排序查找算法(转)

    原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...

随机推荐

  1. SpringJDBC的使用(转载)

    转载自   https://www.yiibai.com/spring/maven-spring-jdbc-example.html 工具: eclipse4.7.2及mysql-8.0.13 项目最 ...

  2. $CF888G\ Xor-MST$ 最小生成树

    正解:最小生成树 解题报告: 传送门$QwQ$ 发现$Kruskal$和$Prime$都不太可做,于是考虑$B$算法. 先大概港下$B$算法的流程趴$QwQ$.大概就,每次对每个联通块找到最近的联通块 ...

  3. Java工程师阅读源码的一些见解

    一.为何阅读源码 就是说,通过阅读源码能给你带来什么好处. 学习如何从需求-设计-实现,开阔你的思维,提升你的架构设计能力: 帮助更好地理解原理和架构设计: 帮助更快地定位线上问题BUG 可以根据自己 ...

  4. Go合集,gRPC源码分析,算法合集

    年初时,朋友圈见到的最多的就是新的一年新的FlAG,年末时朋友圈最多的也是xxxx就要过去了,你的FLAG实现了吗? 这个公众号2016就已经创建了,但截至今年之前从来没发表过文章,现在想想以前很忙, ...

  5. 图解 kubernetes scheduler 架构设计系列-初步了解

    资源调度基础 scheudler是kubernetes中的核心组件,负责为用户声明的pod资源选择合适的node,同时保证集群资源的最大化利用,这里先介绍下资源调度系统设计里面的一些基础概念 基础任务 ...

  6. list绑定

    /** * 首页信息查询的回调函数 * @param 返回值 */ M_Main.ajaxCallBack = function (data){ var dataSource = data.resiC ...

  7. VS从标准输入读入文件

    1.点击[生成],在对应目标平台[64 or 32]文件夹下的[release]或[debug]下找到可执行文件 2.读取销售记录文件 1)打开cmd,将销售记录文件和可执行文件放在同一文件夹下 2) ...

  8. hadoop配置环境变量

    hadoop安装包解压 tar -xvf hadoop-2.7.7.tar.gz 解压成功ll查看文件 配置环境变量 1. vi  /home/wj/hadoop-2.7.7/etc/hadoop/h ...

  9. 配置IDEA默认作者@author

    IDEA安装目录下,使用文本编辑器打开~/bin/idea64.exe.vmoptions文件 在最后添加:-Duser.name=Your name 保存重启IDEA,Done

  10. bzoj 2683 CDQ分治

    题目描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 将格子x,y里的数 ...