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
.
为什么不使用这种boolean
类型?这将按预期工作,没有可能存在问题的整数/布尔混合.
private boolean isValid;
...
if (!isValid) {
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是惯用的Java方法.第三方库使用此功能,您的API的消费者也会使用并期望它.我希望你用的libs给你booleans
,因此它只是你ints
视为booleans
.
尝试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)