33

我正在学习 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 技巧允许对像这样的非布尔类型进行布尔逻辑。


编辑:
上面的例子非常简单,并且产生了狭窄的思维范围。当我最初问这个问题时,我也在考虑函数调用的非布尔返回。例如 Linuxfork()调用。它本身不返回int,但我可以很好地使用数字返回值作为条件,如下所示:

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

这允许我处理子条件中的代码,而不是为父处理(或在错误返回结果为负的情况下)。

所以我目前对 Java 的了解还不够,无法给出一个好的“Java”示例,但那是我的初衷。

4

8 回答 8

51

在 Java 中,

if ( i != 0 )

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

如果i用作标志,它应该是 typeboolean而不是 type int

于 2012-12-10T17:31:34.987 回答
6

为什么不使用boolean类型?这将按您的预期工作,而不会出现潜在的问题整数/布尔合并。

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

请注意,这是惯用的 Java 方法。3rd 方库使用它,您的 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

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

因此,答案是“否”。唯一的就是

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

在java中,条件必须是布尔类型,否则它不能是表达式,这就是为什么

if( i ) 

不允许。

它必须是真或假。

于 2012-12-10T17:33:43.110 回答
0

你可以尝试类似的东西。布尔 i = 真;if (i) System.out.println("i is true");

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

于 2012-12-10T17:33:12.967 回答
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) {

还是更短更清晰。

于 2012-12-10T17:39:36.163 回答
-1

大概是这样的:

int i == 0 ? false : true;

或者反过来:

int i == 1 ? true : false

...

于 2018-05-30T07:25:23.503 回答