JDK源码(7)-Boolean

简介: JDK源码(7)-Boolean

 一、概述

这个类依然是Arthur van Hoff这哥们写的,是对基本数据类型boolean的一个包装,源码的注释说的很清楚:

An object of type Boolean contains a single field whose type is boolean.这个类中有个属性的类型是基本类型boolean

这个类为boolean提供了很多boolean和String互相转换的方法,以及提供了当处理boolean的时的一些常量和方法。

二、常见方法

1.类定义如下:

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

image.gif

2.五个属性

//对应于基本类型boolean中的true
    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");
    //The value of the Boolean.
    private final boolean value;
    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -3665804199014368530L;

image.gif

3.构造方法:

public Boolean(boolean value) {
        this.value = value;
    }

image.gif

但这个构造方法一般情况下很少被用到,都是使用他的静态工厂方法valueOf(boolean)的,这个工厂方法有更好的时空间性能优势。此外,还提供了一个字符串参数的构造:

public Boolean(String s) {
        this(parseBoolean(s));
    }

image.gif

具体逻辑在方法parseBoolean中,

public static boolean parseBoolean(String s) {
        //传入的字符串非空并且为忽略大小写的true时,返回true,否则返回false
        return ((s != null) && s.equalsIgnoreCase("true"));
    }

image.gif

静态构造工厂(官方文档就是这么叫的),性能好:

public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
    //String参数的
    public static Boolean valueOf(String s) {
        return parseBoolean(s) ? TRUE : FALSE;
    }

image.gif

4.hashCode方法,一个是1231,一个是1237

public static int hashCode(boolean value) {
        return value ? 1231 : 1237;
    }

image.gif

5.equals

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

image.gif

6.getBoolean

从系统参数中获取参数名对应的值,如果是“true”就返回true。否则抛出参数异常或空指针异常。

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

image.gif

7.compare

比较两个布尔值是否相等,相等返回0,否则第一个参数是true返回1,第一个参数是false返回-1。

三、特殊点的方法

三个逻辑方法:

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;
    }

image.gif


相关文章
|
4天前
|
安全 前端开发 Java
JDK源码级别彻底剖析JVM类加载机制
JDK源码级别彻底剖析JVM类加载机制
|
4天前
|
缓存 Dubbo Java
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
|
4天前
|
缓存 Java Spring
Spring 源码阅读 66:基于 JDK 的 AOP 代理如何获取拦截器链(4)- 将 Advice 封装为拦截器
【1月更文挑战第1天】本文分析了 Advice 被封装成 MethodInterceptor 的过程,Spring AOP 用到的五种 Advice 中,有些本身就是 MethodInterceptor 的实现类,而有些需要通过适配器的封装。
44 0
|
4天前
|
算法 Java 索引
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
35 0
|
4天前
|
设计模式 Java
根据JDK源码Calendar来看工厂模式和建造者模式
根据JDK源码Calendar来看工厂模式和建造者模式
|
4天前
|
Java Linux iOS开发
Spring5源码(27)-静态代理模式和JDK、CGLIB动态代理
Spring5源码(27)-静态代理模式和JDK、CGLIB动态代理
24 0
|
4天前
|
XML Java 数据格式
Spring 源码阅读 70:基于 JDK 的 AOP 代理拦截器链执行(4)- 容易被忽略的 ExposeInvocationInterceptor
【1月更文挑战第5天】本文分析了 Spring AOP 拦截器链中的一个特殊拦截器 ExposeInvocationInterceptor 的注册的时机以及它的作用。至此,基于 JDK 的 AOP 代理拦截器链执行的逻辑就分析完了。
451 0
|
4天前
|
Java 索引 Spring
Spring 源码阅读 69:基于 JDK 的 AOP 代理拦截器链执行(3)- MethodInterceptor 分析
【1月更文挑战第4天】本文详细分析了 Spring AOP 中五种增强类型对应的拦截器中增强方法的执行逻辑,结合上一篇中分析的 ReflectiveMethodInvocation 中proceed方法的执行逻辑,就组成了完整的拦截器链递归调用的逻辑。
35 0
|
4天前
|
Java 索引 Spring
Spring 源码阅读 68:基于 JDK 的 AOP 代理拦截器链执行(2)- ReflectiveMethodInvocation 分析
【1月更文挑战第3天】本文分析了 ReflectiveMethodInvocation 类中的proceed方法,通过对这个方法的分析,了解了连接器链中的增强逻辑是如何逐层执行的,以及目标方法是什么时候被调用的。
44 0
|
4天前
|
Java Spring
Spring 源码阅读 67:基于 JDK 的 AOP 代理拦截器链执行(1)- 执行前的准备工作
【1月更文挑战第2天】本文总结了 JdkDynamicAopProxy 的invoke方法在获取到拦截器链之后,是如何开始执行增强逻辑的。对于拦截器链为空的情况,会直接调用目标方法,而存在拦截器的情况下,会将拦截器链和目标方法调用的信息封装成一个 MethodInterceptor 对象,执行其proceed方法,来完成增强逻辑和目标方法的执行。
23 0