日期:2014-05-20  浏览次数:20811 次

if(a="b")和if("b"=a)哪种写法好,为什么?
如题。我知道if("b"=a)更好,但是不知道为什么,求教!
------解决方案--------------------
定值在前,变量中后,,可以屏蔽空指针
------解决方案--------------------



public class Here {

public static void main(String[] args) {

String a="ab";
String b="ab";
//我喜欢这样写,定值在前,变量中后,,可以屏蔽空指针。
if("ab"==a&&a.length()>0){
System.out.println("equal");
}else{
System.out.println("not equal");
}
if(b=="ab"&& b.length()>0 ){
System.out.println("equal");
}else{
System.out.println("not equal");
}
}
}


------解决方案--------------------
引用:
如题。我知道if("b"=a)更好,但是不知道为什么,求教!


引用:
为什么变量在后就可以屏蔽空指针呢?


楼主说的,如果使用==来比较的话,是一样的。
s == "s" 和 "s" == s 没有区别,也不存在空指针的问题。

空指针的是在使用方法对比的时候出现的,如equal() :
如下面代码所示,第一句会抛出异常,因为s是null,null没有equal()方法,这就是空指针异常
而第二句就会正常执行,因为"Hello"是常量String,肯定有equal()方法,所以不会抛出异常。
这样做,就提高了代码的健壮性。

    String s = null;
        s.equal("Hello");
        "Hello".equal(s);

------解决方案--------------------
== 比较的是是否引用同一个实例, equals比较的是内容相同否
------解决方案--------------------
我知道 LZ的意思,其实这种写法确实比较好,比较安全。
目的就是为了防止空指针,在java中,没有“指针”,我就不说指针了。
我举例给你你就懂了。
public void read(String value){
    if (value.equals("0")) {
       System.out.println("input 0!");
    }
}

如果传进来的是 null的话,就出现 NullPointerException (最常见的异常,因为引用为 null,而你仍然调用其方法),如果是另一种 表示,就不会出现我说的原因了。
我说的蛮清楚了吧  
------解决方案--------------------
呵呵 就是为了防止写出你发帖这种 才说的第二种好
用第一种写出你发帖这种 编译器就过了 不好拍错
常量写前面少写了一个等号编译器会报错
不能对常量赋值你就看出来了
其他的没什么
------解决方案--------------------
下面这种写法,万一  a为null 那么会抛出NullPointerException

if (a.equals("b")) {
    // do something
}


而下面这种写法,即使a为null,那么"b".equals(a) 也只会得出false,不会抛出异常

if ("b".equals(a)) {
    // do something
}