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

}

时间: 2024-08-01 19:04:38

Boolean类源码分析的相关文章

List 接口以及实现类和相关类源码分析

List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除(removeAll,retainAll),获取(subList). 还有一些判定操作:包含(contains[All]),相等(equals),索引(indexOf,lastIndexOf),大小(size). 还有获取元素类型数组的操作:toArray() 注意事项 两种迭代器Iterator和L

CCTextureCache类源码分析 (1)

CCTextureCache类源码分析(1): 1. CCTextureCache类: 这个类跟纹理缓存有关,我们跟着代码分析下这个类是怎么对纹理进行缓存的. /** Returns the shared instance of the cache * 单例 */ static CCTextureCache * sharedTextureCache(); 2.我们在创建精灵的时候会调用 CCTextureCache::sharedTextureCache()->addImage(pszFilen

CCTextureCache类源码分析(2)

CCTextureCache类源码分析(2): 在CCTextureCache类源码分析(1)中,我们分析了CCTextureCache如何实现 纹理缓存的,但是在分析的过程中,我们忽略了很多东西,比如CCImage类 如何加载纹理图片,这一篇我们分析一下CCImage: 源码分析: 1.CCImage继承自CCObject 2.成员变量,这些变量需要我们通过解析图片文件获得 unsigned char *m_pData; //图片数据 CC_SYNTHESIZE_READONLY(unsign

2020了你还不会Java8新特性?(四)Collector类源码分析

Collector类源码分析 jdk8是怎么对底层完成支持的.不了解底层,平时用还可以,但是遇到问题的时候就会卡在那里.迟迟灭有解决方案.在学习一门新技术时,先学习怎么去用,不要执着于源码.但是随着用的越来越多,你去了解底层是比较好的一种学习方法. 有多种方法可以实现同一个功能.什么方式更好呢? 越具体的方法越好. 减少自动装箱拆箱操作 collect : 收集器 Collector作为collect方法的参数. Collector作为一个接口.它是一个可变的汇聚操作,将输入元素累计到一个可变的

Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析

上一章,我们分析Node类的源码,在Node类里面耦合了一个 Scheduler 类的对象,这章我们就来剖析Cocos2d-x的调度器 Scheduler 类的源码,从源码中去了解它的实现与应用方法. 直入正题,我们打开CCScheduler.h文件看下里面都藏了些什么. 打开了CCScheduler.h 文件,还好,这个文件没有ccnode.h那么大有上午行,不然真的吐血了, 仅仅不到500行代码.这个文件里面一共有五个类的定义,老规矩,从加载的头文件开始阅读. #include <funct

Cocos2d-X3.0 刨根问底(三)----- Director类源码分析

上一章我们完整的跟了一遍HelloWorld的源码,了解了Cocos2d-x的启动流程.其中Director这个类贯穿了整个Application程序,这章随小鱼一起把这个类分析透彻. 小鱼的阅读源码的习惯是,一层层地分析代码,在阅读Director这个类的时候,碰到了很多其它的Cocos2d-x类,我的方式是先大概了解一下类的作用,完整的去了解Director类,之后再去按照重要程度去分析碰到的其它类. 一点一点分析 CCDirector.h #ifndef __CCDIRECTOR_H__

C++卷积神经网络实例:tiny_cnn代码详解(11)——层结构容器layers类源码分析

在这篇博文中我们对tiny_cnn卷积神经网络模型中的最后一个网络结构方面的类--layers做简要分析. 首先,layers通俗的讲可以被称为是层结构的vector,即层结构容器.由于卷积神经网络是一个多层的网络模型,因此有必要将网络中各个层进行统一管理,这便引出了本篇博文中所要介绍的layers类.layers类是一个vector类型的变量,其中压入的元素就是网络中的各个层模型,这里给出一个简单的结构图,一目了然: 从上图中可以清晰的看到layers的vector结构,说白了就是一个层结构类

java.lang.Boolean 类源码解析

Boolean源码比较简单. 1 public final class Boolean implements java.io.Serializable, 2 Comparable<Boolean> 3 { 4 /** 5 * The {@code Boolean} object corresponding to the primitive 6 * value {@code true}. 7 */ 8 public static final Boolean TRUE = new Boolean(

Request类源码分析

通过APIView进入找到Request的源码 可以看见一堆属性和方法,其中request.data其实是一个方法,被包装成一个属性 继续看__getattr__和query_params方法: 代码总结: Request其实就是原生request对象被包装后的Request,即重写了__getattr__,return getattr(self._request, attr) 比如:print(request.GET)就当于print(request.query_params) 原文地址:ht