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);
}
Boolean类源码分析的更多相关文章
- List 接口以及实现类和相关类源码分析
List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除( ...
- Java Properties类源码分析
一.Properties类介绍 java.util.Properties继承自java.util.Hashtable,从jdk1.1版本开始,Properties的实现基本上就没有什么大的变动.从ht ...
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- Java并发编程笔记之Unsafe类和LockSupport类源码分析
一.Unsafe类的源码分析 JDK的rt.jar包中的Unsafe类提供了硬件级别的原子操作,Unsafe里面的方法都是native方法,通过使用JNI的方式来访问本地C++实现库. rt.jar ...
- String 类源码分析
String 源码分析 String 类代表字符序列,Java 中所有的字符串字面量都作为此类的实例. String 对象是不可变的,它们的值在创建之后就不能改变,因此 String 是线程安全的. ...
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
上一章,我们分析Node类的源码,在Node类里面耦合了一个 Scheduler 类的对象,这章我们就来剖析Cocos2d-x的调度器 Scheduler 类的源码,从源码中去了解它的实现与应用方法. ...
- Java线程池ThreadPoolExecutor类源码分析
前面我们在java线程池ThreadPoolExecutor类使用详解中对ThreadPoolExector线程池类的使用进行了详细阐述,这篇文章我们对其具体的源码进行一下分析和总结: 首先我们看下T ...
- Cocos2d-X3.0 刨根问底(三)----- Director类源码分析
上一章我们完整的跟了一遍HelloWorld的源码,了解了Cocos2d-x的启动流程.其中Director这个类贯穿了整个Application程序,这章随小鱼一起把这个类分析透彻. 小鱼的阅读源码 ...
- Spring之WebContext不使用web.xml启动 初始化重要的类源码分析(Servlet3.0以上的)
入口: org.springframework.web.SpringServletContainerInitializer implements ServletContainerInitializer ...
随机推荐
- android 06 LinearLayout
xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la ...
- 亲测apache
http://www.cnblogs.com/bluewelkin/p/3805107.html 里面是纠正了原文的一些小错误,即可正常安装 1.su 命令 2.安装apr-1.3.5.tar.gz ...
- Oracler读取各种格式的相关日期格式
CREATE OR REPLACE Package Pkg_Stm_Date As --Purpose:相关日期处理功能包 --获取某一天是第几周 Function ...
- 咱也玩玩Wordpress
博客暂时转移到了 -> www.zhyfzy.ga 域名改成.com啦 -> www.zhyfzy.com
- HDU 4294 Multiple(搜索+数学)
题意: 给定一个n,让求一个M,它是n个倍数并且在k进制之下 M的不同的数字最少. 思路: 这里用到一个结论就是任意两个数可以组成任何数的倍数.知道这个之后就可以用搜索来做了.还有一个问题就是最多找n ...
- 使用CDN加载jQuery类库后备代码
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></ ...
- android 简单的开机自启
今天我们主要来探讨android怎么让一个service开机自动启动功能的实现.Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.in ...
- app图标和启动页设置
弄了一下午,终于把iOS中图标的设置和启动页的设置弄明白了.我想以后再也不会浑了. 进入正题: 一:apple 1).iPhone4s 3.5寸屏,也就是640*960,但在模拟器上正常用的是320* ...
- 【POJ3237】【树链剖分】Tree
Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edg ...
- modifytime是一个神奇的column name----这边文章是错的totally,因为我的实验不彻底。timestamp属性很神奇,头一个timestamp,会自动的成DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在mysql里边modifytime是一个神奇的column name,试一下. 请执行sql语句 CREATE TABLE `test_time` ( `modifytime` timestamp ...