Kann Stapelüberlauf immer [(a == 1 && a == 2 && a == 3) auf true setzen](https://stackoverflow.com/questions/48270127/can-a-1-a-2- Der Artikel a-3-ever-evalu-to-true) ist beliebt. Die ursprüngliche Geschichte ist ein Javascript-Problem, aber ich habe einen Artikel gesehen, der das gleiche Problem in Peri hat, also werde ich einen Artikel veröffentlichen, um auf den Trend zu kommen.
Derzeit verwende ich hauptsächlich Java in meinem Unternehmen, daher habe ich mir überlegt, wie ich es mit Java machen soll. Ich habe mich gefragt, ob es irgendwo in Qiita ist, also habe ich viele Dinge gefangen, aber [(a == 1 && a == 2 && a == 3) ist immer wahr. Qiita-Artikelzusammenfassung, die das Stapelüberlaufproblem gelöst hat]( Soweit ich https://qiita.com/aimof/items/bb786c112f7dcc3be6c9) sehen kann, schien es nicht so zu sein. Wenn Sie es dann finden, warum nicht die erste Fahrt machen? Dies ist das Ergebnis des Quetschens des Balls durch Versuch und Irrtum.
Es scheint verschiedene Lösungen zu geben. Als Beispiel sieht es so aus.
==
überladenReferenz: ((a == 1 && a == 2 && a == 3) kann immer wahr sein?)
Ich habe es vorerst so oft versucht. Java unterliegt strengen Codierungsbeschränkungen, erlaubt nicht das Auslassen des Schreibstils, der in anderen Sprachen ausgeführt werden kann, und implementiert häufig keine Funktionen in anderen Sprachen, sodass es im Grunde nicht funktioniert. ..
==
Java implementiert keine erweiterten Funktionen wie das Überladen von Operatoren. Es ist in C ++ und Perl.
Main.java
public class Main {
static int i = 1;
public static void main(String[] args) {
System.out.println(a() == 1 && a() == 2 && a() == 3);
//true wird angezeigt
}
static int a() {
return i++;
}
}
Ich hätte es tun können, wenn Java eine Funktion wie "Funktionen ohne Argumente können weglassen ()" hätte. Ich denke, das ist wahrscheinlich das Bedauerlichste.
Erstens werde ich wütend, wenn ich ein Objekt nicht mit einem primitiven Typ vergleichen kann.
Object a = 1;
System.out.println(a == 1 && a == 2 && a == 3); //Kompilierungsfehler
Das Aufrufen eines Feldes oder einer Methode in einem Objekt funktioniert nicht, da Sie am Ende etwas wie "a.number" oder "a.getint ()" schreiben müssen.
Es gibt einige praktische Klassen, die den Typ eines Objekts so konvertieren können, wie er ist. Dies ist eine Wrapper-Klasse.
Integer a = 1;
System.out.println(a == 1); //Intern a.intValue() ==Werden Sie 1
Erstellen Sie dann eine Klasse, die dies erbt, und spielen Sie mit intValue ()
! Als ich dachte, ich könnte es nicht mit der letzten Klasse erben. Korrekt.
Ist es nicht möglich, eine Regel wie "Bei Verwendung der Funktionsschnittstelle kann () weggelassen werden, wenn kein Argument vorhanden ist"?
In Java ist es unmöglich, immer (a == 1 && a == 2 && a == 3) auf true zu setzen. Wenn Sie die Lösung kennen, lassen Sie es mich bitte wissen. .. ..
Ich habe es gefunden, wenn ich es richtig nachgeschlagen habe. Es tut mir allen meinen Vorfahren leid. Ich möchte true auch in Java mit == 1 && a == 2 && a == 3 ausgeben Ich möchte true auch in Java mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben Ausgabe true mit if (a == 1 && a == 2 && a == 3) in Java (Invisible Identifier) Ich möchte true auch in Java mit == 1 && a == 2 && a == 3 (PowerMockito Edition) ausgeben Ich möchte true auch in Java mit == 1 && a == 2 && a == 3 (schwarze Ausgabe) ausgeben
Wenn Sie PowerMockito verwenden, können Sie Integer zwangsweise erben.
Recommended Posts