请问
equals和==去用的时候,为什么通常把常量放前面,变量放后面。网上有说这样防止空指针异常,但我写了个测试,并没有发现空指针,请高手指点指点,为什么要那么写,主要讲解下原理,并举点例。3Q
String str = null;
if (str == null)
// if (null == str)
{
// System.out.println("null == str");
System.out.println("str == null");
}
else if (str != null)
// else if (null != str)
{
System.out.println("str != null");
// System.out.println("null != str");
}
equals和==去用的时候,为什么通常把常量放前面,变量放后面。网上有说这样防止空指针异常,但我写了个测试,并没有发现空指针,请高手指点指点,为什么要那么写,主要讲解下原理,并举点例。3Q
String str = null;
if (str == null)
// if (null == str)
{
// System.out.println("null == str");
System.out.println("str == null");
}
else if (str != null)
// else if (null != str)
{
System.out.println("str != null");
// System.out.println("null != str");
}
System.out.println(str.equals(""));
C语言带来的习惯
if (1 = str)编译器可以检测出。
而 if (str = 1) 这种,编译器检测不出。
我指c编译器。
不过java里
equals还有点儿意义,==好像没必要这样写。
也就是先!=null,再!equals("")
否则会有空指针异常
也就是先!=null,再!equals("")
否则会有空指针异常
有道理才怪,你当这是C语言吗?Java里没这种情况。
List list = null;
if(list==null){//直接写null是可以的,如果放一个为null的变量就不可以了。如下一个:
System.out.print("正确的");
}
int x=0;
if(list.size==x){//出错。等号两边都必须有意义
System.out.print("错误的的");
}
比如说JAVASCRIPT中if ( i == null ) 和 if ( i = null ) 明显两者都不会错,但逻辑上
的表达就很不一样了。
“==”中第一个使用来比较的,如果和null比较所以第一个基本上可以为任何值,但是右边的值使用来与之比对的就必须是一个对java来说有意义的值,所以说像是:
List list = null;
if(list==null){//直接写null是可以的,如果放一个为null的变量就不可以了。如下一个:
System.out.print("正确的");
}
int x=0;
if(list.size==x){//出错。等号两边都必须有意义
System.out.print("错误的的");
}