2011-07-12 10 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++では、ゼロ以外の値はすべてtrueとみなされ、ゼロはfalseとみなされます。つまり、intとboolは互換性があります。したがって、if (i = 4)はC/C++では真です。 iは値4を取得しており、これはif (4)に相当します。しかし、Javaのbooleanはintと異なり、booleanが必要なintは使用できません。その場合、i == 4はブール値ですが、i = 4はintです。最後の1つの割り当ては、比較されません。

7

あなたのif文で比較演算子(==)の代わりに、代入演算子(=)を使用する必要があります。

Cでは、有効な代入演算子is the value that is assignedの結果です。あなたの例がC言語であった場合、結果のコードはif(4)と等しくなります。これは真のステートメントに評価され、コードはコンパイラによって何の不満もなく常に実行されます。 Javaは、おそらくこのような何かを意味するいくつかのケースをチェックします。

+0

の読取ラインにあります。 – 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における文の場合と条件がint型のものとすることができるので、それはCにコンパイルされます。しかし、あなたの状態でiに4を割り当てれば、Cで期待することはできません。

0
if (i=4) { 
} 

は期待どおりに動作しませんが、実際には、私は非0であることを確認します。

Javaでは、ブール値に評価される式が必要です。したがって、==演算子が必要です。その場合の代入演算子はintと評価されます。

3

私はそれがCでうまく動作することに同意しません。コンパイルしても混乱します。

また、これはJavaで許可されていない理由である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"; 

に "hello" を出力します。あなたは書く必要があります

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

最も近いのは、ブール型を使用している問題です。

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

これはコンパイルされますが、ほぼ確実にバグです。一般的に使用される

つの場所の割り当ては、割り当ての結果が割り当てられた値であるCのテキスト

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

}