就之前寫程式的經驗來看,要比較值是否相等都會用 = 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 比較的是值
留言列表