源码分析,基本上都加载注解上了,如有谬误,请指正,谢谢。
jdk1.8.0_161
/**
* boolean类型的封装类
* 实现序列化接口,实现Comparable接口
* auther: jiyx
* date: 2018/9/12.
*/
public class Boolean implements Serializable, Comparable<Boolean> {
/**
* boolean类型的false,直接使用,所以一般情况下Boolean可以直接引用这里
*/
public static final Boolean TRUE = new Boolean(true);
/**
* boolean类型的false,直接使用,所以一般情况下Boolean可以直接引用这里
*/
public static final Boolean FALSE = new Boolean(false);
/**
* Boolean类型的Class对象
*/
@SuppressWarnings("unchecked")
// public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
/**
* Boolean对象具体的值,这里用final修饰
*/
private final boolean value;
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -3665804199014368530L;
/**
* new对象
*/
public Boolean(boolean value) {
this.value = value;
}
/**
* 以字符串的形式创建对象
*/
public Boolean(String s) {
this(parseBoolean(s));
}
/**
* 格式化字符串成boolean
*/
public static boolean parseBoolean(String s) {
// 只有当字符串不是null,并且是‘true’时,才能返回true
return ((s != null) && s.equalsIgnoreCase("true"));
}
/**
* 转成基本类型
*/
public boolean booleanValue() {
return value;
}
/**
* 格式化基本类型到包装类型
*/
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
/**
* 格式化字符串成包装类型
*/
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE;
}
/**
* toString,静态的
*/
public static String toString(boolean b) {
return b ? "true" : "false";
}
/**
* toString
*/
public String toString() {
return value ? "true" : "false";
}
/**
* hashCode
*/
@Override
public int hashCode() {
return Boolean.hashCode(value);
}
/**
* hashCode,静态
* 真1231,假1237。这两个数是比较大的质数,也就是素数。
* 1.素数。假如将Boolean放入一个HashTable中,那么这两个数的共同因子就比较少,在求取hash时,那么出现相同hash值的概率就比较小。
* 2.为何选择如此大的素数。为什么不是2和3呢。如果选择了较小的素数,那么在求取hash的时候,可能出现分布不均的情况。
* 总之,就是为了在进行hash操作是尽量不冲突,并均匀。
* TODO 感觉个人翻译的不是很好,可以查看文末参考文章进行解惑。
*/
public static int hashCode(boolean value) {
return value ? 1231 : 1237;
}
/**
* equals
*/
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
/**
* 这个是获取系统中的属性,然后转成boolean值
*/
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = parseBoolean(System.getProperty(name));
} catch (IllegalArgumentException | NullPointerException e) {
}
return result;
}
/**
* 比较两个不同的boolean值,非静态
*/
public int compareTo(Boolean b) {
return compare(this.value, b.value);
}
/**
* 比较两个不同的boolean值,静态
*/
public static int compare(boolean x, boolean y) {
return (x == y) ? 0 : (x ? 1 : -1);
}
/**
* 两个boolean值的逻辑于
* 这个有意思了,以后判断两个boolean值且关系的时候,可以试试,
* 不过个人感觉这个可能不太能用的到
*/
public static boolean logicalAnd(boolean a, boolean b) {
return a && b;
}
/**
* 两个boolean的逻辑或运算
*/
public static boolean logicalOr(boolean a, boolean b) {
return a || b;
}
/**
* 两个boolean值的异或运算,这里就是只有一个是true一个是false才会返回true
*/
public static boolean logicalXor(boolean a, boolean b) {
return a ^ b;
}
}
参考:
1.Boolean的hashcode返回值解惑