Gibt es eine bessere Möglichkeit, einen Booleschen Wert in Java zu negieren als ein einfaches if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Gibt es eine bessere Möglichkeit, einen Booleschen Wert in Java zu negieren als ein einfaches if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Antworten:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
Operator (tatsächlich zwei davon zusammen mit zwei ++
Operatoren), definiert jedoch keinen !!
Operator. Wenn Sie möchten -(-(integer))
, können Sie Leerzeichen zwischen den beiden -
Zeichen verwenden. Aber !!
Parsen als zwei !
Betreiber unabhängig von Leerraum.
theBoolean ^= true;
Weniger Tastenanschläge, wenn Ihre Variable länger als vier Buchstaben ist
Bearbeiten : Code liefert in der Regel nützliche Ergebnisse, wenn er als Google-Suchbegriffe verwendet wird. Der obige Code funktioniert nicht. Für diejenigen, die es brauchen, ist es bitweises XOR wie hier beschrieben .
theBoolean = !theBoolean;
odertheBoolean = theBoolean ? false : true;
Der "offensichtliche" Weg (für die meisten Menschen)
theBoolean = !theBoolean;
Der "kürzeste" Weg (meistens)
theBoolean ^= true;
Der "visuellste" Weg (am unsichersten)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Da der Zuweisungsoperator immer das zurückgibt, was zugewiesen wurde, wird der Wert über den bitweisen Operator umgeschaltet und anschließend der neu zugewiesene Wert zurückgegeben, der im Methodenaufruf verwendet werden soll.
C
jeden Fall, aber Java
es ist nicht erlaubt, Boolesche und Ganzzahlen zu mischen (auch Dinge wie while(1)
sind in Java nicht möglich).
Wenn Sie boolesche NULL-Werte verwenden und diese als falsch betrachten, versuchen Sie Folgendes:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Wenn Sie keine booleschen NULL-Werte übergeben, versuchen Sie Folgendes:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Diese sind die saubersten, weil sie die Absicht in der Methodensignatur zeigen, sind leichter zu lesen als die ! Betreiber und kann leicht debuggt werden.
Verwendung
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Wenn Sie Groovy oder eine Sprache verwenden, die Erweiterungsmethoden zulässt, können Sie natürlich eine Erweiterung registrieren und einfach Folgendes tun:
Boolean b = false
b = b.toggle() // == true
Boolean
und schalten Sie es wirklich innerhalb der Methode um (aber immer noch etwas mehrdeutig).
Diese Antwort wurde bei der Suche nach "Java Invert Boolean Function" angezeigt. Das folgende Beispiel verhindert, dass bestimmte statische Analysetools aufgrund der Verzweigungslogik fehlschlagen. Dies ist nützlich, wenn Sie einen Booleschen Wert invertieren müssen und keine umfassenden Komponententests erstellt haben;)
Boolean.valueOf(aBool).equals(false)
oder alternativ:
Boolean.FALSE.equals(aBool)
oder
Boolean.FALSE::equals
Boolean.FALSE::equals
zu einer Mapping-Funktion übergehen könnten , anstatt ein kleines Lambda zu schreiben
Wenn Sie nichts besonders Professionelles tun, können Sie immer eine Util-Klasse verwenden. Beispiel: Eine Util-Klasse aus einem Projekt für eine Klasse.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
Dann erstellen Sie einfach ein Util-Objekt
Util u = new Util();
und haben etwas für die RückgabeSystem.out.println( u.flip(bool) );
Wenn Sie am Ende immer wieder dasselbe verwenden, verwenden Sie eine Methode, und erstellen Sie eine Util-Klasse, insbesondere wenn es sich um projektübergreifende Methoden handelt. Keine Ahnung, was der Industriestandard ist. (Erfahrene Programmierer können mich gerne korrigieren)
Die Klasse BooleanUtils
unterstützt die Negation eines Booleschen Werts. Sie finden diese Klasse in commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Vor:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Nach dem:
boolean result = isresult();
result ^= true;