Eclipseが教えてくれるのはなぜですか
int a = 4;
if (a) {
//do stuff
}
間違っている、またはCannot convert from integer to boolean
?
私はC、C ++でそのようなものを書くことに慣れていて、Javaもそれで大丈夫だと思いました。Eclipseはどのように機能しますか?それとも、Javaの仕組みですか?回避策はありますか?
Eclipseが教えてくれるのはなぜですか
int a = 4;
if (a) {
//do stuff
}
間違っている、またはCannot convert from integer to boolean
?
私はC、C ++でそのようなものを書くことに慣れていて、Javaもそれで大丈夫だと思いました。Eclipseはどのように機能しますか?それとも、Javaの仕組みですか?回避策はありますか?
Java は、C++ とは異なり、最初からブール型が組み込まれていました。
したがって、ブール値として整数を使用する必要はありませんでした。
整数からブール値への暗黙的な変換を禁止するとif (x = 4)
、ほとんどの場合、悪名高いバグを防ぐことができます。
Java ブール値リテラルでは、true値とfalse値のみを持つことができます。0 と 1 は Java ではブール値として機能しません。
FROM Java 言語仕様:
ブール型には、ブール リテラル true と false で表される 2 つの値があります。
その理由は、C には特定の型がないためですboolean
。代わりに、0 以外の整数はブール値の「true」に評価されます。したがって、C コードでは次のようになります。
if(a)
a
0 以外の値 4 が割り当てられ、条件は次のように評価されます。true
Java には基本型がboolean
あり、内部の条件の値はif
この型でなければなりません。
a=4
in Java は に 4 を割り当てa
、評価の最終結果を として返しますが、integer value 4
型boolean
が期待されます。したがって、互換性のない型に関するコンパイル時エラーが発生します。
int 変数 a に対する if(a != 0) は、C または C++ の if(a) と同じことを Java で行います。
より一般的には、Java は C または C++ の方言ではないことを認識することが非常に重要です。最も強い類似性は表面的な外観にあります。Javaは別の言語として学ぶ必要があります。Java を作成するときに C または C++ の知識に依存すると、非常にイライラすることになります。使い慣れたイディオムの多くは機能しません。機能するイディオムもわかりません。