不可比较的类型 boolean 和 nulltype
incomparable types boolean and nulltype
当我以这种方式编译我的代码时,我得到了提到的错误:
public class SymTree{
public static boolean isSym(BT bt)
{
return(IsMirror(bt.left, bt.right));
}
private static boolean IsMirror(BT lr,BT rr)
{
if(lr==rr==null) (((ERROR HERE)))
return true;
.....
然而当我这样编译时
private static boolean IsMirror(BT lr,BT rr)
{
if(lr==rr)&&(lr==null))
return true;
.......
我没有收到任何错误。错误是具有 nulltype 和布尔值的不可比较类型,但是我比较的对象中没有一个是布尔值 - 它们都是来自 BT(二叉树)class 的对象,已在别处定义。
谢谢!
这是因为在 if(lr==rr==null)
中,lr==rr
是一个布尔比较,您通过执行 ==null
与 null
进行比较。
例如,如果假设 lr
等于 rr
那么 lr==rr
将 return true
接下来你要比较的是 true==null
.在这里你会得到错误,因为 boolean 和 null 不可比较。
检查 (lr==rr==null)
。 lr==rr
是一个 boolean
。它很原始,无法与null
.
相比
它给你这个错误的原因是因为当你写这个时:
if (lr==rr==null)
编译器将其解释为类似于以下之一:
if ((lr==rr) == null)
if (lr == (rr==null))
基本上,您是在将布尔条件(lr==rr
或 rr==null
)与可空类型进行比较,这没有意义,因为布尔是值类型并且可以 从不 为空。
当我以这种方式编译我的代码时,我得到了提到的错误:
public class SymTree{
public static boolean isSym(BT bt)
{
return(IsMirror(bt.left, bt.right));
}
private static boolean IsMirror(BT lr,BT rr)
{
if(lr==rr==null) (((ERROR HERE)))
return true;
.....
然而当我这样编译时
private static boolean IsMirror(BT lr,BT rr)
{
if(lr==rr)&&(lr==null))
return true;
.......
我没有收到任何错误。错误是具有 nulltype 和布尔值的不可比较类型,但是我比较的对象中没有一个是布尔值 - 它们都是来自 BT(二叉树)class 的对象,已在别处定义。 谢谢!
这是因为在 if(lr==rr==null)
中,lr==rr
是一个布尔比较,您通过执行 ==null
与 null
进行比较。
例如,如果假设 lr
等于 rr
那么 lr==rr
将 return true
接下来你要比较的是 true==null
.在这里你会得到错误,因为 boolean 和 null 不可比较。
检查 (lr==rr==null)
。 lr==rr
是一个 boolean
。它很原始,无法与null
.
它给你这个错误的原因是因为当你写这个时:
if (lr==rr==null)
编译器将其解释为类似于以下之一:
if ((lr==rr) == null)
if (lr == (rr==null))
基本上,您是在将布尔条件(lr==rr
或 rr==null
)与可空类型进行比较,这没有意义,因为布尔是值类型并且可以 从不 为空。