• JDK源码之Boolean类分析


    一 简介

    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;
        }
    
  • 相关阅读:
    php之aop实践
    PHP一个类AOP的实现
    PHP系列学习之AOP
    PVE上安装黑裙辉6.2
    安装proxmox VE(PVE)教程
    x-forwarded-for的深度挖掘
    nginx的配置总结,有时间自己整理
    openresty入门文章(笔者自用)
    pve apt-get update error 升级报错-文章未完工和验证
    pve proxmox 常见问题,perl warning
  • 原文地址:https://www.cnblogs.com/houzheng/p/12187335.html
Copyright © 2020-2023  润新知