Jeder hat Vorteile und ich verstehe die Unterschiede, aber was wird als Best / Standard Practice angesehen? Und warum?
Zum Beispiel :
"myString".equals(myStringVar)
- Vermeidet eine potenzielle NPE und erfordert keine Nullprüfung. (Gute Sache?)
- Sauberer zu lesen, da keine Nullprüfung erforderlich ist.
- Wenn null kein erwarteter Wert ist, kann Ihr Programm unterbrochen werden, ohne klüger zu sein.
jedoch
myStringVar.equals("myString")
- Erfordert eine Nullprüfung, wenn null ein erwarteter Wert ist. (Gute Sache?)
- Kann zusammengesetzte Bedingungen mit Nullprüfungen überladen.
- Ermöglicht NPE, uns mitzuteilen, ob etwas kaputt gegangen ist.
Welche Variante wird als Standard für Java angesehen und warum?
java
programming-practices
coding-standards
BrandonV
quelle
quelle
Antworten:
Ich vermute, dass dies auf eine Sicherheitsvorkehrung zurückzuführen ist, die beim Programmieren in älterem C (oder C ++) angewendet wird. In C könnten Sie versehentlich einen Wert zuweisen, wenn Sie die Gleichheit testen möchten:
Diese Bedingung ist immer erfüllt, da die Zuweisung xa den Wert 3 hat und nicht testet, dass x gleich 3 ist. Um diese subtilen Fehler zu vermeiden, haben Entwickler begonnen, die Bedingung umzukehren:
Dies enthält den gleichen "Fehler", generiert jedoch einen Compilerfehler, sodass es sicherer ist.
Moderne Sprachen haben dieses Problem nicht und können Sie leicht warnen, wenn Sie versuchen, solche Dinge zu tun. Als solches ist es keine ziemlich reine Präferenz, also wählen Sie eine aus und verwenden Sie sie konsequent.
quelle
equals
. Im Gegensatz zu C besteht das Problem bei Java darin, dass der Ausdruckx.equals(y)
eine NPE auslöst, wenn erx
null ist. Wenn Sie ein String-Literal haben"something"
und den Fallnull
als "nicht gleich" betrachten möchten , ist es sinnvoll zu schreiben,"something".equals(y)
wenn Sie nicht wissen, oby
null sein kann. Dies wird niemals eine NPE werfen.Standard und bewährte Verfahren variieren je nach Unternehmenskultur, für die Sie arbeiten
Unser Standard in .NET ist
myStringVar == "myString"
einfach, weil wir uns darauf geeinigt haben, dh wir glauben, dass es sauber und präzise istHinweis: Dies gilt nicht für Java, da
==
die Referenzen anstelle der Objekte selbst verglichen werden. In Java sollten Sie verwendenmyStringVar.equals("myString")
.quelle
==
da nur Objektreferenzen verglichen werden. Das heißt, +1 für die Setzungskonvention definiert oft die "richtige" Art, Dinge zu tun.myStringVar == "myString"
eine zutiefst schlechte Idee für Java ist (es sei denn, Sie sind absolut sicher, dassmyStringVar
es intern ist).Ich denke, Sie haben Recht damit, dass es von der Nullheitssemantik der Variablen abhängt. Wenn Sie nicht erwarten, dass es null ist, und nicht danach suchen und damit umgehen müssen, ist das erste Formular sauberer.
Das heißt, anstatt das String-Literal einzubetten, wäre eine bessere Option wahrscheinlich folgende:
Insbesondere, wenn die Möglichkeit besteht, die Zeichenfolge an mehreren Stellen zu verwenden.
quelle