zoukankan      html  css  js  c++  java
  • 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;
        }
    
  • 相关阅读:
    POJ-3026 Borg Maze(BFS+最小生成树)
    HDU-1875 畅通工程再续(最小生成树+判断是否存在)
    POJ-1679 The Unique MST(次小生成树、判断最小生成树是否唯一)
    POJ-1751 Highways(最小生成树消边+输出边)
    POJ-2349 Arctic Network(最小生成树+减免路径)
    POJ-2031 Building a Space Station (球的最小生成树)
    八皇后问题 2n皇后问题
    约瑟夫环
    判断1/N是否为无限小数
    HDU-4004 The Frog's Games (分治)
  • 原文地址:https://www.cnblogs.com/houzheng/p/12187335.html
Copyright © 2011-2022 走看看