比较Java布尔类
当我得知将两个布尔对象与==进行比较会得到错误的答案时,我感到震惊 请看下面的测试代码。测试a和测试c给出了一致的答案 测试b失败。新布尔(true)似乎可以创建具有相同值的单独对象,而不是返回对Boolean.true的引用比较Java布尔类,java,boolean,Java,Boolean,当我得知将两个布尔对象与==进行比较会得到错误的答案时,我感到震惊 请看下面的测试代码。测试a和测试c给出了一致的答案 测试b失败。新布尔(true)似乎可以创建具有相同值的单独对象,而不是返回对Boolean.true的引用 public static void main(String[] args) { Boolean a = Boolean.TRUE; Boolean b = new Boolean(true); Boolean c = null; b
public static void main(String[] args) {
Boolean a = Boolean.TRUE;
Boolean b = new Boolean(true);
Boolean c = null;
boolean x = true;
boolean y = false;
System.out.println("Test a");
System.out.println(( a == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(a)) ? "TRUE" : "FALSE");
System.out.println("Test b");
System.out.println(( b == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(b)) ? "TRUE" : "FALSE");
System.out.println("Test c");
System.out.println(( c == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(c)) ? "TRUE" : "FALSE");
/* OUTPUT is
Test a
TRUE
TRUE
Test b
FALSE
TRUE
Test c
FALSE
FALSE
*/
}
因为
Boolean
是一种引用类型,并且==
测试它们是否是内存中的同一对象,那么您会得到false,因为您使用new
分配了b
?这就是Java的工作方式,不管你喜欢与否。这是真的……那么问题是什么呢?也许可以探索一下为什么你认为调用构造函数会给你带来回报。或者更确切地说,如果要为Boolean
编写参数化构造函数,您认为如何编写它以返回Boolean.TRUE
?故事的寓意是,不要创建自己的TRUE和FALSE实例,您需要多少对象来表示TRUE和FALSE?另外,=
与equals()不同。
如果您对Java有合理的了解,您会对新的布尔值(true)!=新布尔值(true)
?