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