• Boolean类源码分析


    Boolean类里面的常量:

    Boolean.TRUE:这个是调用Boolean的构造函数,新建了一个Boolean对象,所以TRUE是Boolean类型的。用来避免每次都创建新的Boolean对象,可以通过Boolean b =  Boolean.TRUE;

    public static finalBoolean TRUE = new Boolean(true);

     

    Boolean.FALSE:这个是调用Boolean的构造函数,新建了一个Boolean对象,所以FALSE是Boolean类型的。

    public static finalBoolean FALSE = new Boolean(false);

     

    Boolean.TYP:TYPE的类型是Class<Boolean>,通过调用Calss<T>是一个带有泛型的final类

    这里通过调用Class的static native 的getPrimitiveClass(String name)方法,返回Class对象

    public static final Class<Boolean>TYPE = Class.getPrimitiveClass("boolean");

     

    Boolean的两个构造类

    第一个参数是boolean类型的时候。

    public Boolean(boolean value) {

           this.value = value;

    }

    第 二个参数是String类型的时候,这个地方调用了toBoolean(String s)方法,toBoolean(Strin g s)是一个private方法,返回的类型是boolean类型。这个地方只有是字符串是“true”(不管其大小写)的时候返回true,其他时候都返 回false。

    public Boolean(String s) {

           this(toBoolean(s));

    }

    private static boolean toBoolean(Stringname) {

           return ((name != null) &&name.equalsIgnoreCase("true"));

    }

     

    这个如同Integer.parseInt(String s)方法,都是将String转换成自己类型的对象,这里转换成boolean类型,这里与构造函数相同,都是调用toBoolean(Strin g s)方法

    public static boolean parseBoolean(Strings) {

           return toBoolean(s);

        }

     

    这个方法是进行了拆箱操作,将Boolean类型的值转换成boolean类型

    public boolean booleanValue() {

           return value;

    }

     

    这个方法如同Integer的valueof(int i)方法,这里也是返回一个Boolean类型的实例,这个实例也是早就创建好的,这个地方就是采用了装箱操作,只不过是用了缓存里面提前创建好的实例.这是创建Boolean对象的静态工厂方法

    public static Boolean valueOf(boolean b) {

           return (b ? TRUE : FALSE);

    }

     

    将boolean类型转换成String类型

    public static String toString(boolean b) {

           return b ? "true" : "false";

    }

     

    将Boolean类型的值转换成String类型

    public String toString() {

           return value ? "true" : "false";

    }

     

    将Boolean类型的值转换成对应的hashCode

    这里讲解一下为什么是1231,1237,这两个已经是足够大的素数了。首先不能是复合数,对于hash表或者hash map来说,容易产生冲突,如果比较小的素数,可能会出现不平均分配

    public int hashCode() {

           return value ? 1231 : 1237;

    }

     

    比较两个Boolean对象是否相等,通过转换成boolean类型进行比较,最后返回boolean类型的数据。

    public boolean equals(Object obj) {

           if (obj instanceof Boolean) {

               return value == ((Boolean)obj).booleanValue();

           }

           return false;

        }

     

    判断系统属性存在并且是字符串“true”,如果不是,则返回false

    public static boolean getBoolean(Stringname) {

           boolean result = false;

           try {

               result = toBoolean(System.getProperty(name));

           } catch (IllegalArgumentException e) {

           } catch (NullPointerException e) {

           }

           return result;

    }

     

    比较两个boolean类型的变量,如果相等返回0,如果不相等,第一个变量为true,返回1;第一个变量为false返回-1

    public static int compare(boolean x,boolean y) {

           return (x == y) ? 0 : (x ? 1 : -1);

    }

     

    //比较两个Boolean类型的变量,调用的compare(booleanx, boolean y)方法

    public int compareTo(Boolean b) {

           return compare(this.value, b.value);

        }

  • 相关阅读:
    python之模块与包
    python之模块4
    python之模块3
    python之模块2
    Day10:Linux基础:搭建samba服务
    Day9:Linux基础:程序管理
    Day8: Linux基础片:网络配置
    番外篇:硬盘分区、创建文件系统
    Day7: Linux基础片:系统监控
    Day6: Linux基础片:文件压缩、Vim用法
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/4769579.html
Copyright © 2020-2023  润新知