web-dev-qa-db-ja.com

「int」型の「boolean」結果の確認

私は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 )
_

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


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

_if( fork() ) {
    // do child code
_

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

だから、現時点では十分なJavaが良い "Java"の例を与えるには分からないが、それは私の本来の意図だった。

29
Mike

Javaでは、

if ( i != 0 )

整数izeroと異なるかどうかを確認する慣用的な方法です。

iがフラグとして使用される場合、boolean型ではなく、int型である必要があります。

44
NPE

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

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

これは慣用的なJavaアプローチです。サードパーティのライブラリはこれを使用し、APIのコンシューマもそれを使用し、期待します。使用するライブラリがbooleans、そして、あなたはintsbooleansとして扱うだけです。

5
Brian Agnew

FROM [〜#〜] jls [〜#〜]

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

したがって、答えはありません。唯一の

if ( i != 0 )
3
PermGenError

Javaでは、条件はブール型である必要があります。そうでない場合、式にすることはできません。

if( i ) 

許可されていません。

Trueまたはfalseでなければなりません。

2
Fyre

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

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE
2
Tioma

おそらくこのようなもの:

int i == 0 ? false : true;

またはその逆:

int i == 1 ? true : false

...

0
Wingie

ブールの代わりに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) {

まだ短くて明確です。

0
stefan bachert

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

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

0
Butter Beer