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

时间:2012-12-10 17:29:29

标签: java boolean int logical-operators

我正在学习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”示例,但那是我最初的意图。

8 个答案:

答案 0 :(得分:42)

在Java中,

if ( i != 0 )

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

如果i用作标记,则其类型应为boolean,而不应为int类型。

答案 1 :(得分:5)

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

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

请注意,这是惯用的Java方法。第三方库使用此功能,您的API的消费者也会使用并期望它。我希望您使用的库提供给您booleans,因此您只需将ints视为booleans

答案 2 :(得分:3)

FROM JLS

  

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

因此没有答案。唯一的是

if ( i != 0 )

答案 3 :(得分:2)

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

的原因
if( i ) 

是不允许的

必须是真或假。

答案 4 :(得分:2)

从Apache BooleanUtils尝试common-lang

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

答案 5 :(得分:0)

你可以尝试类似的东西。     布尔值i = true;     如果我)         System.out.println(“我是真的”);

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

答案 6 :(得分:0)

如果你坚持使用 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) {

仍然更短更清晰。

答案 7 :(得分:0)

可能是这样的:

int i == 0 ? false : true;

或反过来说:

int i == 1 ? true : false

...