就之前寫程式的經驗來看,要比較值是否相等都會用 =  or  == 

但最近剛剛才開始跳到 Java 讓我覺得十分的莫名奇妙,明明只是單純的判斷 

ex : if (tmp == "0") 之類的,結果 tmp 的值明明就是 "0" 但是卻一直沒 run 

後來才知道原來 == 是用來判斷兩個比較物是不是 references 到同一個物件

如果只是一般單純的字串比較是可以直接用 == 

ex : if("hi" == "hi"")

但如果你的字串是從另外 new 出來的物件所產生的,你再用 == 就會屎了

因為他們已經對應到不同的參考

以這篇提供的範例來看

http://www.javaworld.com.tw/jute/post/view?bid=29&id=9578&sty=3&age=0&tpg=1&ppg=1

String s1 = "hello";

String s2 = "hell"+"o";

System.out.println("Using equals op"+ (s1==s2)); //True

System.out.println("Using equals method" + (s1.equals(s2))); //True

String s3 = new String("hello");

String s4 = new String("hello");

System.out.println("Using equals op" + (s3==s4)); //False

System.out.println("Using equals method" + (s3.equals(s4))); //True

所以以後要做值的比較要用 equals

ex : s3.equals(s4)

所以要比較 tmp 是不是空值

if (! "".equals(tmp)) 

真是不習慣

 

結論 :

==        比較的是位址

equals  比較的是值

arrow
arrow
    全站熱搜

    小雕 發表在 痞客邦 留言(0) 人氣()