检查“int”类型的“boolean”结果

我正在学习Java,来自C,我发现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-ish逻辑检查? 只是想知道是否有任何Java技巧允许布尔逻辑在这样的非布尔类型上。


编辑:
上面的例子非常简单,并使自己适应狭隘的思维范围。 当我最初问这个问题时,我也在考虑函数调用的非布尔返回。 例如Linux fork()调用。 它本身不会返回一个int ,但我可以很好地使用条件的数字返回值,如:

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

这允许我处理子项的条件中的代码,而不是父项(或者出现错误的否定返回结果)。

所以我现在还不知道足够的Java给出一个好的“Java”示例,但那是我最初的意图。

在Java中

 if ( i != 0 ) 

是检查整数i是否与zero不同的惯用方法。

如果i用作标志,则它应该是boolean类型而不是int类型。

为什么不使用boolean类型? 这将按预期工作,没有可能存在问题的整数/布尔混合。

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

请注意,这是惯用的Java方法。 第三方库使用此function,您的API的消费者也会使用和期望它。 我希望你使用的libs给你booleans ,因此它只是你把ints作为booleans

来自JLS

布尔类型有两个值,由布尔文字true和false表示,由ASCII字母组成。

因此没有答案。 唯一的是

 if ( i != 0 ) 

在java中,条件必须是boolean类型,它不能是一个表达式,这就是原因

 if( i ) 

不被允许

它必须是真或假。

你可以试试这样的东西。 布尔值i = true; if(i)System.out.println(“我是真的”);

只需将其初始化为布尔值而不是整数。

如果你坚持使用int而不是boolean,只需使用一个方法来转换

 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) { 

仍然更短更清晰。

尝试使用Apache common-lang中的 BooleanUtils 。

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

可能是这样的:

int i == 0 ? false : true;

或者相反:

int i == 1 ? true : false