Was ist der am meisten akzeptierte Art und Weise ein zu konvertieren , boolean
um einen int
in Java?
Was ist der am meisten akzeptierte Art und Weise ein zu konvertieren , boolean
um einen int
in Java?
Antworten:
int myInt = myBoolean ? 1 : 0;
^^
PS: wahr = 1 und falsch = 0
(foo && (!bar || baz)) ? 1 : 0
. Wenn es sich nur um eine Kennung handelt, sind die Parens offensichtlich nicht notwendig oder wünschenswert.
(boolean expression) ? 1 : 0;
wäre das verständlicher. Ich denke, das my
Präfix hat es wie eine Variable aussehen lassen.
foo && (!bar || baz) ? 1 : 0
wäre ein Syntaxfehler. (Ich weiß, es ist 6 Jahre her)
Die Verwendung des ternären Operators ist die einfachste, effizienteste und am besten lesbare Methode, um das zu tun, was Sie möchten. Ich ermutige Sie, diese Lösung zu verwenden.
Ich kann jedoch nicht widerstehen, eine alternative, erfundene, ineffiziente und unlesbare Lösung vorzuschlagen.
int boolToInt(Boolean b) {
return b.compareTo(false);
}
Hey, die Leute stimmen gerne für so coole Antworten!
Bearbeiten
Übrigens habe ich oft Konvertierungen von einem Booleschen in einen Int gesehen, um einen Vergleich der beiden Werte durchzuführen (im Allgemeinen bei Implementierungen von compareTo
Methoden). Boolean#compareTo
ist der richtige Weg in diesen speziellen Fällen.
Bearbeiten 2
Java 7 hat eine neue Dienstprogrammfunktion eingeführt, die direkt mit primitiven Typen arbeitet Boolean#compare
(Danke shmosel ).
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
das Autoboxing verwenden und vermeiden. 2. Die Dokumentation für Boolean.compareTo()
gibt nicht an, dass 1 zurückgegeben wird, sondern nur "ein positiver Wert, wenn dieses Objekt wahr und das Argument falsch darstellt".
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;
int y= BooleanUtils.toInteger(x);
BooleanUtils.toInteger
wird als gerecht implementiert return bool ? 1 : 0;
.
Das hängt von der Situation ab. Oft ist der einfachste Ansatz der beste, weil er leicht zu verstehen ist:
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
oder
int otherThing = something ? 1 : 0;
Aber manchmal ist es nützlich, eine Aufzählung anstelle eines booleschen Flags zu verwenden. Stellen Sie sich vor, es gibt synchrone und asynchrone Prozesse:
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
In Java kann enum zusätzliche Attribute und Methoden haben:
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
ist, dass Sie Haltepunkte in die if-Blöcke einfügen können.
Wenn Sie Apache Commons Lang verwenden (was meiner Meinung nach in vielen Projekten verwendet wird), können Sie es einfach so verwenden:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
Methode gibt 1 zurück, wenn boolean_expression
true, andernfalls 0
BooleanUtils.toInteger
wird als gerecht implementiert return bool ? 1 : 0;
.
Wenn Sie verschleiern möchten, verwenden Sie Folgendes:
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
Lass uns einen Streich spielen Boolean.compare(boolean, boolean)
. Standardverhalten der Funktion: Wenn beide Werte gleich sind, wird 0
nichts anderes zurückgegeben -1
.
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
Erläuterung : Wie wir wissen, ist die Standardrückgabe von Boolean.compare im Falle einer Fehlanpassung -1, sodass +1 den Rückgabewert auf 0 für False
und 1 für setztTrue
Boolean.compare(myBoolean, false)
würde besser zu der zitierten Beschreibung passen
Die Tatsache, dass ich eine Wrapper-Methode um eine if-Anweisung zum Umwandeln eines Werts schreiben muss, trägt nur zu der bereits riesigen Liste von Gründen bei, warum Java einfach schon sterben sollte. Und wenn ich sehe, dass der ternäre Operator nicht einmal in eine Funktion eingeschlossen ist, sondern nur überall kopiert wird, sehe ich eine boolesche Umwandlung in int, die mich nur verrückt macht. Es ist eine Verschwendung von CPU-Zyklen und eine Beleidigung der Lesbarkeit des Codes.
Außerdem haben die meisten Antworten hier Hunderte von Upvotes ohne Erklärung, was mich vermuten lässt, dass schlechte Praktiken nur darauf zurückzuführen sind, dass man so viel Java ausgesetzt ist. Wenn ich einen ternären Operator schreiben würde, um Boolesche Werte in einer modernen Sprache in int umzuwandeln, würde ich am nächsten Tag von jedem Job entlassen, den ich haben könnte. Deshalb habe ich heute aufgegeben, Vernunft für meine Java-Aufgaben einzusetzen, und mich entschlossen, Dummheit anzunehmen:
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
undfalse
jeweils?