检查“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
…