在Java中将布尔值转换为int

在Java中将布尔值转换为int,java,casting,boolean,int,Java,Casting,Boolean,Int,在Java中,将boolean转换为int的最常见方式是什么 int myInt = myBoolean ? 1 : 0; ^^ PS:true=1和false=0如果true->1和false->0映射是您想要的,您可以执行以下操作: boolean b = true; int i = b ? 1 : 0; // assigns 1 to i. 这要视情况而定。通常,最简单的方法是最好的,因为它很容易理解: if (something) { otherThing = 1; } el

在Java中,将
boolean
转换为
int
的最常见方式是什么

int myInt = myBoolean ? 1 : 0;
^^


PS:true=1和false=0

如果
true->1
false->0
映射是您想要的,您可以执行以下操作:

boolean b = true;
int i = b ? 1 : 0; // assigns 1 to i.

这要视情况而定。通常,最简单的方法是最好的,因为它很容易理解:

if (something) {
    otherThing = 1;
} else {
    otherThing = 0;
}

但有时使用枚举而不是布尔标志很有用。假设存在同步和异步进程:

Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
在Java中,enum可以具有其他属性和方法:

public enum Process {

    SYNCHRONOUS (0),
    ASYNCHRONOUS (1);

    private int code;
    private Process (int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

简单

使用三元运算符是实现所需操作的最简单、最高效和最可读的方法。我鼓励您使用此解决方案

int boolToInt(Boolean b) {
    return b.compareTo(false);
}
然而,我忍不住要提出一个替代的、人为的、低效的、不可读的解决方案

int boolToInt(Boolean b) {
    return b.compareTo(false);
}
嘿,人们喜欢投票给这么酷的答案

编辑

顺便说一下,我经常看到从布尔值到int值的转换只是为了比较两个值(通常,在
compareTo
方法的实现中)<代码>布尔#比较是在这些特定情况下的方法

编辑2

Java7引入了一个新的实用函数,它可以直接处理基本类型,
Boolean#compare
(感谢shmosel)


让我们用
布尔值玩把戏。比较(布尔值,布尔值)
。函数的默认行为:如果两个值相等,则返回
0
,否则返回
-1

public int valueOf(Boolean flag) {
   return Boolean.compare(flag, Boolean.TRUE) + 1;
}

说明:正如我们所知,Boolean.compare的默认返回值为-1,如果不匹配,那么+1将返回值设置为
False
0
True的1,如果要混淆,请使用以下方法:

import org.apache.commons.lang3.BooleanUtils;
boolean x = true;   
int y= BooleanUtils.toInteger(x);
System.out.println( 1 & Boolean.hashCode( true ) >> 1 );  // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
如果您使用(我认为很多项目都使用它),您可以这样使用它:

int myInt = BooleanUtils.toInteger(boolean_expression); 
toInteger
如果
boolean\u表达式
为真,则返回1,否则返回0

public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}
然后使用:

convBool(aBool);


您认为哪些整数分别对应于
true
false
?有些语言有从int到boolean的隐式转换。Java没有。但是,官方实现中有SQL包,我相信这些包会将“false”转换为0。@Peter Lawrey如果您想与其他没有布尔值作为非数字数据类型的系统进行互操作,则不会这样做。@Peter Lawrey问题实际上不是关于值映射。它是关于如何以最清晰、最可接受的方式进行转换的。从技术上讲,Java编译器已经定义了一个映射。True和False分别编译为1和0。我认为这更适合作为注释,而不是答案。@ThorbjørnRavnAndersen是的。使用另一种更高效的方法,不需要额外的开销。除非您能解释创建字符串对象以简单地检查布尔值在任何方面都是有效的。@b1naryatr0phy您过早地进行了微优化。@Thorbjørnravandersen我无法控制我的方法的使用方式或调用频率,这完全是问题的关键。你牺牲了性能和可读性,却完全没有实际的好处。这绝对是有创意的,但我想不出使用这种方法有什么好处。它更详细,效率更低(我猜),但它确实是一个有趣的方法。在myBoolean代表布尔表达式的情况下,使用括号更可读。是的,就像
(foo&(!bar | | baz))?1:0
。显然,如果它只是一个标识符,那么paren就不是必需的或需要的。对于像我这样的初学者,
(布尔表达式)?1 : 0;会更容易理解。我认为
my
前缀使它看起来像一个变量。@示例括号中的Blrfl是必须的,而不是可读性问题<代码>foo&(!bar | baz)?1:0将是语法错误。(我知道已经6年了)现在有了更多的真相
int-myInt=myBoolean~0:0
将由现代JIT内联,因此不一定效率低下。它还记录了为什么使用b.compareTo以使其可读。它可能很慢,因为我们需要在对象中装箱原语值。三元运算符方法直接处理原语值而不进行转换,因此我认为它更有效。您可以使用
Boolean.compare()
并避免自动装箱。2.
Boolean.compareTo()
的文档没有说它将返回1,只是“如果这个对象表示true,参数表示false,则返回一个正值”。我只是做了一个转换1000000个随机布尔值的测试,该方法始终比基于三元运算符的方法更快。它大约缩短了10毫秒。如果你做了微基准测试,你应该使用一个框架来确保你的测量是正确的。请参阅。使用if而不是
?:
的另一个原因是,您可以在if块内放置断点。
布尔值。比较(myBoolean,false)
更适合引用description@VadzimYes确实会通过与false比较生成1和0,在当前场景中,它会生成0和-1。这两种解决方案都很好,您的评论是+1:-)FWIW,
BooleanUtils.toInteger
只是作为
returnbool实现的?1 : 0;
.Apache Commons可能有用,但这太荒谬了。@EricDuminil这在嵌套(?:)或长的一行程序的情况下可以略微提高可读性。FWIW,
BooleanUtils.toInteger
实现为just
return bool?1 : 0;
System.out.println( 1 & Boolean.hashCode( true ) >> 1 );  // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
int myInt = BooleanUtils.toInteger(boolean_expression); 
public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}
convBool(aBool);