Boolean 类是将 boolean 基本类型进行包装。类型为 Boolean 的对象包含一个单一属性 value,其类型为 boolean。
此外还提供了许多将 boolean 转换为 String、String 转换为 boolean,以及其他一些方法。

一、类定义

public final class Boolean implements java.io.Serializable,Comparable<Boolean>
{

实现的两个接口:

  • java.io.Serializable:可被序列化的标志接口
  • Comparable:强行对实现它的每个类的对象进行整体排序

二、成员变量

    public static final Boolean TRUE = new Boolean(true);public static final Boolean FALSE = new Boolean(false);public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");private final boolean value;

在内部维护了一个 boolean 类型的 value,在我们调用构造器的时候会将 value 给赋值。

还可以看到内部还有三个常量其中两个是 TRUE、FALSE 分别代表布尔值的两个状态,这样我们在使用的时候就可以直接用而不需要去构建一个。

还有一个 TYPE 是接收了 Class.getPrimitiveClass(“boolean”); 的返回值,我们跟进去可以看到 getPrimitiveClass 是一个 native 方法。

static native Class<?> getPrimitiveClass(String name);

三、构造方法

    public Boolean(boolean value) {this.value = value;}//调用parseBoolean(s)public Boolean(String s) {this(parseBoolean(s));}//字符串s忽略大小写后与“true”相等,则返回(Boolean)truepublic static boolean parseBoolean(String s) {return ((s != null) && s.equalsIgnoreCase("true"));}

四、普通方法

4.1、toString()

三目表达式

    public String toString() {return value ? "true" : "false";}@Overridepublic int hashCode() {return Boolean.hashCode(value);}
4.2、hashCode(boolean value)

即 true 返回 1231 而 false 返回 1237

    public static int hashCode(boolean value) {return value ? 1231 : 1237;}public boolean equals(Object obj) {if (obj instanceof Boolean) {return value == ((Boolean)obj).booleanValue();}return false;}
4.3、getBoolean(String name)

获取系统属性

    public static boolean getBoolean(String name) {boolean result = false;try {result = parseBoolean(System.getProperty(name));} catch (IllegalArgumentException | NullPointerException e) {}return result;}
4.4、compareTo(Boolean b)

相同为0,this.value为true返回1,b.value为true返回-1

    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);}
4.5、逻辑运算
    public static boolean logicalAnd(boolean a, boolean b) {return a && b;}public static boolean logicalOr(boolean a, boolean b) {return a || b;}public static boolean logicalXor(boolean a, boolean b) {return a ^ b;}
4.6、equals(Object obj)

先判断是不是从 Boolean 实例化出来的,然后再继续比较是不是相等。

public boolean equals(Object obj) {if (obj instanceof Boolean) {return value == ((Boolean)obj).booleanValue();}return false;
}

4.7、官方推荐方式valueOf()

    public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE);}public static Boolean valueOf(String s) {return parseBoolean(s) ? TRUE : FALSE;}public static String toString(boolean b) {return b ? "true" : "false";}

五、总结

Boolean用两个final的静态变量来表示不同状态的实例,通常这个方法我们也可以借鉴,例如编写一个Weekday类,状态只有7个,就不要让用户写new Weekday(1),直接提供Weekday.MONDAY即可。

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

如果不提供public构造方法,让用户只能通过上面的方法获得静态变量的引用,还可以大大简化equals()方法:

public boolean equals(Object obj) {return this==obj;
}

JDK源码解析之 Java.lang.Boolean相关推荐

  1. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  2. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  3. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  4. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

  5. JDK源码解析之 Java.lang.Object

    Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...

  6. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  7. JDK源码解析之 Java.lang.Byte

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

  8. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  9. JDK源码解析之 java.lang.System

    一个和系统环境进行交互的类. System不允许被实例化, 而且是一个final类 一.不能实例化 private System() {} 二.成员变量 public final static Inp ...

最新文章

  1. java和python哪个好就业2020-java和python哪个未来发展比较好?
  2. 86. Leetcode 264. 丑数 II (动态规划-基础题)
  3. linux 域账户密码忘记,linux基础命令-用户域用户组管理
  4. 拓展 - WebRTC 多视频网络拓扑之三种架构
  5. 04748JAVA语言程序设计实践考试复习
  6. bpsk调制及解调实验_漫画讲解调制解调,深奥的通信原理是不是明白了?
  7. typora主题配置:公众号一键排版
  8. 微信公众平台后台接入简明指南
  9. Origin怎么画圆形而非椭圆形?
  10. word转html java代码_用java实现word转html
  11. used in key specification without a key length
  12. 深度学习之学习(3-4)YOLOV4
  13. 中国移动SP短信网关接入平台
  14. mysql capi函数详解_CAPI函数描述(A-F)
  15. windo10系统哪个版本运行最快呢?
  16. 【SayGoodBye.java】一封离职告别信
  17. MATHTYPE安装出现问题:无法打开要写入的文件;MathType打开word时“安全警告,宏已被禁用”;mathtype与AXmath不能同时使用
  18. 华为数字化转型之道 实践篇 第十章 数字化办公:构建全方位的连接与协同
  19. [LeetCode] 230. Kth Smallest Element in a BST
  20. python 微信公众号接口中文乱码问题

热门文章

  1. php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
  2. qt中QMultiMap获取键值
  3. mysql数据库group_key_【MySQL】数据库复制:组复制(Group Replication)
  4. unix 登录mysql_实例分析mysql用户登录。
  5. dw服务器文件夹在哪里,Dreamweaver CC
  6. android访问百度新闻,百度新闻(com.baidu.news) - 8.3.6.0 - 应用 - 酷安
  7. java获取文件新增内容_关于java生成文件,立即又读这个文件但又找不到文件新增内容的问题...
  8. php直播pk规则,直播源码中的主播PK功能是如何实现的
  9. mysql数据库开发笔记_MySQL数据库生成数据库说明文档
  10. android 混合开发 图片,混合开发的大趋势之一React Native之Image