2011-07-12 37 views
2

If下面給出的邏輯在C語言中運行良好,但它不能在java中工作....爲什麼???
它在編譯時給出java錯誤。如果條件在java

class test 
    { 
    public static void main(String[] args) 
    { 
    int i; 
    if(i=4) 
    System.out.println("hello"); 
    } 
    } 

回答

4

在C/C++中,任何非零值都被認爲是真,零被認爲是假。也就是說,int和bool是可以互換的。所以if (i = 4)在C/C++中是正確的。由於i的值爲4,這相當於if (4)。但在Java中,布爾值與int不同,並且不能在需要布爾值的情況下使用int。請注意,i == 4是布爾值,但i = 4是int。最後一項任務,沒有比較。

7

你需要在你的if語句使用比較操作符(==),而不是賦值運算符(=)。

在C中,有效賦值運算符is the value that is assigned的結果。如果您的示例使用C語言,則生成的代碼將等同於if(4),該語言的計算結果爲true語句,並且代碼始終在編譯器沒有任何抱怨的情況下執行。 Java會檢查一些可能意味着其他內容的情況,比如這個。

+0

的讀取線在C的分配的結果是所分配的值。 – qbert220

+0

是的。我只是在擡頭確認。我知道這是真的還是指定的價值,只是不確定是哪一個。我編輯來反映這一點。 –

+0

我有理論認爲if條件需要一個類型爲'boolean'的返回值,但是在Java中,一個變量的(成功)聲明沒有返回值。那麼爲什麼會有錯誤發生。 – reporter

1

注意雙等號==

class test 
    { 
    public static void main(String[] args) 
    { 
    int i = 4; 
    if(i==4) 
    System.out.println("hello"); 
    } 
    } 
0

它會用C編譯,因爲聲明的,如果在C條件可以是int類型的。但是,在您的情況下,您將4分配給i,並且它不會執行您期望它在C中執行的操作。

0
if (i=4) { 
} 

將工作在C但不會做你的期望。它實際上會檢查我不是0。

Java強制您擁有一個表達式,其值爲一個布爾值。因此你需要==運算符。在這種情況下,賦值運算符將評估爲int。

3

我不會同意它在C中運行良好。即使它編譯,它也會令人困惑。

這也將用C

int i = 0; 
if (i == 4) // i == 4 is not true 
    cout << "hi"; 

if (i = 4) // i = 4 which is treated as true 
    cout << "hello"; 

這就是爲什麼它是Java不允許打印「你好」。你必須寫

int i = 0; 
if (i == 4) // false 
    System.out.println("hello"); 

最接近你可以得到這個問題是使用布爾類型。

boolean b = false; 
if (b = true) 
    System.out.println("hello"); 

這個編譯,但幾乎肯定是一個錯誤。

一個地方分配常用的是在文本

BufferedrReader br = 
String line; 
// assigns and checks the value of readLine() 
while((line = readLine()) != null) { 

}