33

私は C から来た Java を学んでおり、言語とboolean型の興味深い違いを見つけました。C にはbool/がないeanため、数値型を使用してブール論理 ( ) を表す必要があります0 == false

Javaではうまくいかないと思います:

int i = 1;
if (i)
    System.out.println("i is true");

型キャストを介して条件を変更することもありません。

if ((boolean)i)

したがって、次のようなことを行う以外に:

if ( i != 0 )

型に対して C っぽいロジック チェックを行う他の方法はありますintか? このような非ブール型でブール論理を可能にするJavaトリックがあったかどうか疑問に思っています。


編集:
上記の例は非常に単純化されており、狭い範囲の思考に陥っています。最初に質問したとき、関数呼び出しからのブール値以外の戻り値についても考えていました。たとえば、Linuxfork()呼び出し。intそれ自体は返されませんが、次のように条件付きの数値の戻り値をうまく使用できます。

if( fork() ) {
    // do child code

これにより、子の条件付きでコードを処理できますが、親の場合は処理しません (または、エラーに対して負の結果が返された場合)。

そのため、現時点では適切な「Java」の例を示すのに十分な Java の知識はありませんが、それが私の当初の意図でした。

4

8 に答える 8

51

ジャワでは、

if ( i != 0 )

は、整数iが と異なるかどうかを確認する慣用的な方法zeroです。

iをフラグとして使用する場合は、 typebooleanではなくtype にする必要がありintます。

于 2012-12-10T17:31:34.987 に答える
6

booleanタイプを使用しないのはなぜですか?これは、潜在的に問題のある整数/ブール値の混同なしで、期待どおりに機能します。

private boolean isValid;
...
if (!isValid) {
   ...
}

これは慣用的な Java アプローチであることに注意してください。サードパーティのライブラリはこれを使用し、API の消費者もこれを使用して期待します。booleans私はあなたがあなたに与えるために使用するライブラリを期待していintsますbooleans

于 2012-12-10T17:32:48.983 に答える
5

Apache common-lang のBooleanUtilsを試してください。

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE
于 2016-10-05T16:00:37.743 に答える
3

JLSから

ブール型には、ASCII 文字から形成されたブール リテラル true と false で表される 2 つの値があります。

したがって、答えはノーです。唯一だったのは

if ( i != 0 )
于 2012-12-10T17:33:15.357 に答える
2

Java では、条件はブール型である必要があります。それ以外の場合は式にすることはできません。そのためです。

if( i ) 

許可されていません。

true または false のいずれかでなければなりません。

于 2012-12-10T17:33:43.110 に答える
0

ブール値の代わりにintを使用することを主張する場合は、メソッドを使用して変換するだけです

class BooleanHelper
{
   public static boolean toBoolean (int pVal) {
      return pVal != 0;
   }
 ...
}

// apply

if (BooleanHelper.toBoolean(i)) { // BooleanHelper could be avoided using static imports...

ただし、使用するだけです

if (i != 0) {

はさらに短く、より明確です。

于 2012-12-10T17:39:36.163 に答える
0

そのようなことを試すことができます。ブール i = true; if (i) System.out.println("i is true");

整数ではなくブール値として初期化するだけです。

于 2012-12-10T17:33:12.967 に答える
-1

おそらく次のようなものです:

int i == 0 ? false : true;

またはその逆:

int i == 1 ? true : false

...

于 2018-05-30T07:25:23.503 に答える