JDK源码学习:Boolean
类定义
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{
private final boolean value;
}
Boolean对象是不可变的
当满足以下条件时,对象才是可变的:
- 对象创建以后其状态就不能修改
- 对象的所有域都是final类型
- 对象是正确创建的(在对象的创建期间,this引用没有逸出)
两个静态变量
- 不用每次都new一个Boolean
- 节省内存
- 避免创建实例的开销
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
// Good
Boolean b = Boolean.TRUE;
// Bad
Boolean b = new Boolean(true);
两个构造方法
- 能用静态工厂方法就不要使用new (Effective Java Item 1: 考虑用静态工厂方法替代构造器)
public Boolean(boolean value) {
this.value = value;
}
public Boolean(String s) {
this(parseBoolean(s));
}
// 静态工厂方法
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE);
}
hashCode
- Why use 1231 and 1237? StackOverflow: Boolean.hashCode
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;
}