【Java】JDK源码分析——Boolean
Boolean源码分析
一.概述
Boolean是boolean的包装类。
Boolean.java中的相关代码:
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{
…
}
1.Boolean被final修饰,不可以被继承。
2.实现了java.io.Serializable接口,可以进行序列化。
3.实现了Comparable<Boolean>接口,可以进行Boolean之间的比较。
二.源码分析
1.全局变量
Boolean.java中的相关代码:
// boolean中true对应的Boolean对象
public static final Boolean TRUE = new Boolean(true);
// boolean中false对应的Boolean对象
public static final Boolean FALSE = new Boolean(false);
// 抑制没有类型检查而出现的警告
@SuppressWarnings("unchecked")
// Boolean类中对应的原始的boolean
// Boolean.class和boolean.class不相等,但Boolean.TYPE和boolean.class相等
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
// 用于保存Boolean对象的值
private final boolean value;
// 用于序列化
private static final long serialVersionUID = -3665804199014368530L;
2.构造方法
1)参数为boolean
Boolean.java中的相关代码:
public Boolean(boolean value) {
// 保存到全局变量
this.value = value;
}
2)参数为String
Boolean.java中的相关代码:
public Boolean(String s) {
// 调用parseBoolean方法,将String类型的对象转换为boolean类型
// 调用参数为boolean的构造方法
this(parseBoolean(s));
}
3. parseBoolean方法
用于将String类型的对象转换为boolean类型。
Boolean.java中的相关代码:
public static boolean parseBoolean(String s) {
// 若s不为空且s的值为”true”时,返回true
// 否则,返回false
return ((s != null) && s.equalsIgnoreCase("true"));
}
4. booleanValue方法
获取Boolean对象的boolean值。
Boolean.java中的相关代码:
public boolean booleanValue() {
// 返回值
return value;
}
5.valueOf方法
将对象转换为Boolean类型。
1)参数为boolean
Boolean.java中的相关代码:
public static Boolean valueOf(boolean b) {
// 若b为真,返回true对应的Boolean对象TRUE
// 否则返回false对应的Boolean对象FALSE
return (b ? TRUE : FALSE);
}
2)参数为String
Boolean.java中的相关代码:
public static Boolean valueOf(String s) {
// 调用parseBoolean方法,将String对象转化为boolean对象
// 为真返回TRUE对象,否则返回FALSE对象
return parseBoolean(s) ? TRUE : FALSE;
}
6. toString方法
将boolean对象转换为String类型。
1)无参数
Boolean.java中的相关代码:
public String toString() {
// 为真返回”true”,否则返回”false”
return value ? "true" : "false";
}
2)参数为boolean
Boolean.java中的相关代码:
public static String toString(boolean b) {
// 为真返回”true”,否则返回”false”
return b ? "true" : "false";
}
7. hashCode方法
获取哈希值。
Boolean.java中的相关代码:
@Override
public int hashCode() {
// 调用了Boolean的静态方法hashCode
return Boolean.hashCode(value);
}
1)hashCode方法
Boolean.java中的相关代码:
public static int hashCode(boolean value) {
// 若为真,返回1231,否则,返回1237
return value ? 1231 : 1237;
}
8. equals方法
判断两个对象是否相等
Boolean.java中的相关代码:
public boolean equals(Object obj) {
// 若对象的类型为Boolean
if (obj instanceof Boolean) {
// 若相等,则返回true,否则返回false
return value == ((Boolean)obj).booleanValue();
}
// 其它类型,返回false
return false;
}
9. getBoolean方法
将String类型的系统变量转换为boolean类型。
Boolean.java中的相关代码:
public static boolean getBoolean(String name) {
// 默认结果为false
boolean result = false;
try {
// 调用System的getProperty方法,获取String类型的系统变量
// 调用parseBoolean方法,转换为boolean类型
result = parseBoolean(System.getProperty(name));
} catch (IllegalArgumentException | NullPointerException e) {
}
// 返回结果
return result;
}
10. compareTo方法
用于两个Boolean对象的比较。相等时返回0。不相等时,若value为true返回1,为false返回-1。
Boolean.java中的相关代码:
public int compareTo(Boolean b) {
// 调用了重载的方法。
return compare(this.value, b.value);
}
调用了重载的compareTo方法。
Boolean.java中的相关代码:
public static int compare(boolean x, boolean y) {
// x和y相等返回0
// 若x和y不相等,x为真,返回1,x为假,返回-1
return (x == y) ? 0 : (x ? 1 : -1);
}
11. logicalAnd方法
对两个boolean对象进行与运算。
Boolean.java中的相关代码:
public static boolean logicalAnd(boolean a, boolean b) {
return a && b;
}
12. logicalOr方法
对两个boolean对象进行或运算。
Boolean.java中的相关代码:
public static boolean logicalOr(boolean a, boolean b) {
return a || b;
}
13. logicalXor方法
对两个boolean对象进行异或运算。
Boolean.java中的相关代码:
public static boolean logicalXor(boolean a, boolean b) {
return a ^ b;
}
推荐阅读
-
JDK源码分析-HashMap
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
HashMap源码分析--jdk1.8
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
JDK源码分析(6)之 LinkedHashMap 相关
-
源码分析--HashSet(JDK1.8)
-
JDK源码分析(10)之 Hashtable 相关
-
源码分析--ConcurrentHashMap与HashTable(JDK1.8)
-
Java并发编程中线程池源码分析及使用
-
JDK源码分析(7)之 Reference 框架概览