检查"int"类型的"boolean"结果

Mik*_*ike 29 java int boolean logical-operators

我正在学习Java,来自C,我发现这种boolean类型的语言之间有一个有趣的区别.在C中没有bool/ ean所以我们需要使用数字类型来表示布尔逻辑(0 == false).

我想在Java中不起作用:

int i = 1;
if (i)
    System.out.println("i is true");
Run Code Online (Sandbox Code Playgroud)

也没有通过类型转换来改变条件:

if ((boolean)i)
Run Code Online (Sandbox Code Playgroud)

除了做以下事情之外:

if ( i != 0 )
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以对int类型进行C-ish逻辑检查吗?只是想知道是否有任何Java技巧允许非布尔类型的布尔逻辑像这样.


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

if( fork() ) {
    // do child code
Run Code Online (Sandbox Code Playgroud)

这允许我处理子项的条件中的代码,而不是为父项处理代码(或者对于错误的负返回结果).

所以我目前还不知道足够的Java给出一个好的"Java"示例,但那是我最初的意图.

NPE*_*NPE 44

在Java中

if ( i != 0 )
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我认为*真正的成语是使用布尔值.以上是代码气味,恕我直言 (8认同)
  • 当你只做逻辑时,使用布尔值; 当有一个实际有意义的数字时,做`!= 0`. (6认同)

Bri*_*new 5

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

private boolean isValid;
...
if (!isValid) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我会尽力解决你的本能冲动!一个整数与布尔值不同,如果你使用一个整数,有一天你会在其中加入一个意外的值. (7认同)
  • @Mike:Java不是C.方法应该返回成功值,*在失败时抛出异常*.*请*不要使用`int`作为返回类型,除非您打算返回实际数字... (6认同)
  • @thkala是正确的,在Java环境中,其他开发人员会在发生故障时出现异常,而不是"幻数"返回值; 调用堆栈可以捕获异常,而不是检查特定的幻数.由于语言的规范(没有隐式布尔表示的整数)或语言中的附加特征(已检查的异常),一些约定不在语言之间转移. (2认同)

Tio*_*oma 5

尝试Apache common-lang 中的BooleanUtils

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE
Run Code Online (Sandbox Code Playgroud)