If
の場合、C言語ではうまく動作しますが、Javaでは動作しません。
コンパイル中にJavaでエラーが発生します。Javaでの条件が
class test
{
public static void main(String[] args)
{
int i;
if(i=4)
System.out.println("hello");
}
}
If
の場合、C言語ではうまく動作しますが、Javaでは動作しません。
コンパイル中にJavaでエラーが発生します。Javaでの条件が
class test
{
public static void main(String[] args)
{
int i;
if(i=4)
System.out.println("hello");
}
}
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つの割り当ては、比較されません。
あなたのif文で比較演算子(==
)の代わりに、代入演算子(=
)を使用する必要があります。
Cでは、有効な代入演算子is the value that is assignedの結果です。あなたの例がC言語であった場合、結果のコードはif(4)
と等しくなります。これは真のステートメントに評価され、コードはコンパイラによって何の不満もなく常に実行されます。 Javaは、おそらくこのような何かを意味するいくつかのケースをチェックします。
注意等号==
class test
{
public static void main(String[] args)
{
int i = 4;
if(i==4)
System.out.println("hello");
}
}
Cにおける文の場合と条件がint型のものとすることができるので、それはCにコンパイルされます。しかし、あなたの状態でi
に4を割り当てれば、Cで期待することはできません。
if (i=4) {
}
は期待どおりに動作しませんが、実際には、私は非0であることを確認します。
Javaでは、ブール値に評価される式が必要です。したがって、==演算子が必要です。その場合の代入演算子はintと評価されます。
私はそれが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) {
}
の読取ラインにあります。 – qbert220
うん。私はちょうど確認するために探していた。私はそれが本当か割り当てられた値であるか分かりませんでした。これを反映するように編集しました。 –
私はif条件が 'boolean'型の戻り値を必要とするという理論を持っていますが、Javaでは(成功した)変数の宣言には戻り値がありません。だからなぜエラーが起きたのか。 – reporter