1、关于Boolean(2015年05月30日)
背景:刚在看Effective Java,看到一段关于Boolean提供一个返回实例的静态方法的例子,便去看了下Boolean的源码,发现有些内容是之前没注意到的,于是便有了下面这些。
1、
Boolean类将基本类型boolean的值包装在一个对象中,一个Boolean对象之包含一个类型为boolean的字段,摘自源码:
/**
* The value of the Boolean.
*
* @serial
*/
private final boolean value;
Boolean还提供了多个方法用于对boolean类型的基本操作,因为boolean是一个基本类型,没办法进行一些基本的操作。
2、
构造方法摘要 | |
---|---|
Boolean(boolean value) 分配一个表示 value 参数的 Boolean 对象。 |
|
Boolean(String s) 如果 String 参数不为 null 且在忽略大小写时等于 "true" ,则分配一个表示 true 值的 Boolean 对象。 |
Boolean flag1 = new Boolean("true");
System.out.println(flag1); //输出true
Boolean flag2 = new Boolean("abc");
System.out.println(flag2); //输出false
3、Boolean的构造方法、parseBoolean(String name)、valueOf(String s)、getBoolean(String name)这四个方法内部都是调用的同一个方法toBoolean(),以下是摘自源码:
public Boolean(String s) {
this(toBoolean(s));
}
public static boolean parseBoolean(String s) {
return toBoolean(s);
}
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = toBoolean(System.getProperty(name));
} catch (IllegalArgumentException e) {
} catch (NullPointerException e) {
}
return result;
}
private static boolean toBoolean(String name) {
return ((name != null) && name.equalsIgnoreCase("true"));
}
所以以上4个方法传入的字符串只有在为"true"的时候才会返回true,其他情况一律返回false。
4、关于Boolean比较符equals和==
其实还是和其他的对象一样,equals比较的是值,==比较的是对象在内存中的首地址
Boolean flag1 = new Boolean("true");
Boolean flag2 = new Boolean("true");
System.out.println(flag1.equals(flag2)); //输出true
System.out.println(flag1==flag2); //输出false
5、关于Boolean的compareTo(Boolean b )和compare(boolean x,boolean y)方法
以下摘自源码:
public int compareTo(Boolean b) {
return compare(this.value, b.value);
}
public static int compare(boolean x, boolean y) {
return (x == y) ? 0 : (x ? 1 : -1);
}
两者的区别在于compareTo是非静态方法,供实例变量使用,用于调用对象与参数对象的比较
compare是静态方法,供Boolean类使用,用于两个boolean值的比较
比较的共同点就是:比较对象表示的boolean值相同,则返回0,如果此对象表示 true,参数表示 false,则返回一个正值;如果此对象表示 false,参数表示 true,则返回一个负值
Boolean flag1 = new Boolean("true");
Boolean flag2 = new Boolean("true");
System.out.println(flag1.compareTo(flag2)); //输出0
System.out.println(Boolean.compare(true, false)); //输出1
System.out.println(Boolean.compare(false, true)); //输出-1