2011-07-23 132 views
0

在我看來,這if語句不起作用。java if語句錯誤

我在Java的新的,但是我知道C#和C++相當好,但我從來沒有見過這樣的事:

today=edit[0].substring(0,10); 
if (today == edit[0].substring(0,10)) 
{ 
    pars_prog.addView(name_prog[i]); 
} 

而且它不會進入IF功能?

Are if語句與Java(Android)不同嗎?

+1

我不事這得到你的問題,但仍然是不好的做法,使用==那裏的操作員如果(今天。equals(編輯[0] .substring(0,10)) – emory

+0

這不是'if'的工作方式不同,它是String對象(因此也是'==')。 '.equals()' – Nanne

+0

從你的編碼我將你最好的編碼器在這個宇宙.. – K6t

回答

4

當您使用==任何對象引用(不管是字符串或者任何其他非基本類型),它只是比較引用是否相等 - 即是否他們指的是完全相同的對象,或者它們是否都是null。

在這種情況下,您需要確定字符串是否爲等於 - 即它們是否代表相同的字符序列。您應該使用該equals方法:

if (today.equals(edit[0].substring(0,10))) 

然而,一般做這個的時候你要小心的是,equals調用的目標就是非空的,否則你會得到一個NullPointerException

注意,C#是相似 - 除了將==操作者可以被重載,並重載string。如果操作數的編譯時類型是不能同時string,你仍然會得到引用比較:

object text1 = new StringBuilder("hello").ToString(); 
object text2 = new StringBuilder("hello").ToString(); 
Console.WriteLine(text1 == text2); // False 
+0

謝謝你隊友,這正是我一直在尋找的 – MBP

0

你有比較字符串時使用equals方法..現在你是比較參考,這就是爲什麼你從來沒有進入if塊

3

您正試圖==比較字符串,這是身份比較 - 它將檢查這兩者是否是相同的實例(在JVM中)而不是比較它們的內容。

改爲使用today.equals(..)

也就是說,如果出現您正在處理日期,那麼String不是處理此問題的最佳方法。使用CalendarDate(有點過時)或喬達時間DateTime