変換する最も受け入れ方法は何であるboolean
にint
Javaで?
変換する最も受け入れ方法は何であるboolean
にint
Javaで?
回答:
int myInt = myBoolean ? 1 : 0;
^^
PS:true = 1およびfalse = 0
(foo && (!bar || baz)) ? 1 : 0
。明らかに、それが単なる識別子である場合、括弧は不要または望ましいものではありません。
(boolean expression) ? 1 : 0;
より理解しやすいでしょう。my
接頭辞によって変数のように見えたと思います。
foo && (!bar || baz) ? 1 : 0
構文エラーになります。(私はそれが6年になったことを知っています)
三項演算子の使用は、必要なことを行うための最も単純で、最も効率的で、最も読みやすい方法です。このソリューションを使用することをお勧めします。
しかし、私は代替の、工夫された、非効率的な、読み取り不可能なソリューションを提案することに抵抗することはできません。
int boolToInt(Boolean b) {
return b.compareTo(false);
}
ねえ、人々はそのようなクールな答えに投票するのが好きです!
編集する
ちなみに、2つの値を比較することを唯一の目的として(通常、compareTo
メソッドの実装で)、ブール値からintへの変換をよく見ました。Boolean#compareTo
これらの特定の場合に行く方法です。
編集2
Java 7は、プリミティブ型を直接操作する新しいユーティリティ関数を導入しましたBoolean#compare
(shmoselに感謝)
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
オートボクシングを使用および回避できます。2.のドキュメントでBoolean.compareTo()
は、「1が返される」とは述べられていません。「このオブジェクトがtrueを表し、引数がfalseを表す場合、正の値」のみです。
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
それは状況に依存します。理解しやすいため、多くの場合、最も単純なアプローチが最適です。
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
または
int otherThing = something ? 1 : 0;
ただし、ブールフラグの代わりにEnumを使用すると便利な場合があります。同期プロセスと非同期プロセスがあると想像してください。
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
Javaでは、列挙型は追加の属性とメソッドを持つことができます。
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
、ifブロック内にブレークポイントを配置できることです。
あなたが使用している場合はApache Commonsのラング(私はプロジェクトの多くはそれを使用すると思います)、あなたはちょうどこのようにそれを使用することができます:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
メソッドboolean_expression
は、trueの場合は1を返し、それ以外の場合は0を返します。
BooleanUtils.toInteger
として実装されていreturn bool ? 1 : 0;
ます。
難読化する場合は、次を使用します。
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
とトリックをしましょうBoolean.compare(boolean, boolean)
。関数のデフォルトの動作:両方の値が等しい場合は0
それ以外の場合に戻ります-1
。
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
説明:知っているように、Boolean.compareのデフォルトの戻り値は、不一致の場合は-1であるため、+ 1は、戻り値を0にFalse
、1を1に設定します。True
Boolean.compare(myBoolean, false)
引用された説明に対してより適切に対応します
値をキャストするためのifステートメントの周りにラッパーメソッドを記述しなければならないという事実は、Javaがすでに死ぬはずの理由の膨大なリストに追加されているだけです。そして、3項演算子が関数にラップされておらず、どこにでもコピーして貼り付けられているのを見ると、intへのブール型キャストがちょうど私を狂わせるのがわかります。これは、CPUサイクルの無駄であり、コードの読みやすさに対する侮辱です。
また、ここでの回答のほとんどは、説明がゼロの何百もの賛成票を持っているので、悪い習慣は、Javaに非常にさらされた結果にすぎないと思います。booleanをintにキャストするための三項演算子を現代の言語で記述した場合、翌日はどんな仕事でも解雇されます。だから今日、私は自分のJava割り当てで理性を働かせようとするのをあきらめ、愚かさを受け入れることに決めました:
public static int booltoint(boolean nonsense) {
// Let's start with indenting using spaces, 16 of them to be precise
String[] ____int = new String[500];
____int[0] = Boolean.toString(nonsense);
try {
Thread.sleep(100);
} catch (Exception e) { }
Random rand = new Random();
int n = rand.nextInt((int)1e9);
int result = 0;
int other_Result = 1;
for (int i = -5; i < 2; i++) {
try {
if (n == 35467247) return 5; // let's just fail with one in a billion chance
if ((5 - ____int[i].length()) == 1) {
return ++result;
} else if(____int[i] == "false") {
return --other_Result;
}
} catch (Exception e) {
// This method will throw an exception 5 times every single time I
// cast a boolean to int before returning an integer
}
}
return (int)1e35;}
true
と思いますfalse
か?