Wie erklären Sie x und y so, dass x+=y gibt eine Zusammenstellung der Fehler und x=x+y nicht?
Ich lief in dieser Frage in einem interview und konnte nicht kommen mit einer Lösung. Ich kenne das Umgekehrt getan werden kann, wie gezeigt, in Was bedeutet das "+ = " - operator zu tun, die in Java?
Also die Frage war wie weiter unten.
..... x = .....;
..... y = .....;
x += y; //compile error
x = x + y; //works properly
- Interessanterweise hat java ermöglichen die Verkettung mit dem plus-Zeichen? Ich weiß nicht java, aber das scheint eine Möglichkeit
- gerade getestet, scheint nicht die Lösung zu sein hier. += funktioniert gut, um zwei strings zu verketten.
- Was ein nutzloses interview-Frage.
- Völlig einverstanden. Solche details sind gut, wenn Sie suchen, bei arbeiten an einem compiler-oder JVM-Implementierung, aber für einen normalen Programmierer dies ist die Art von Sache, die Sie einfach nur Aussehen bei der spec-und dann vergessen.
- Wie die meisten interview-Fragen... ich interviewt wurde vor kurzem in einem job, und das interview war ein paar-Programmierung test mit dem tatsächlichen code zu schreiben und design zu diskutieren. Was für eine Erleichterung vor dummen Fragen!
- es hängt davon ab, ob es gefragt wird, um herauszufinden, ob der befragte die Antwort kennt - das wäre nutzlos. Aber zu sehen, wie jemand reagiert auf ein blödes interview-Frage, oder sehen, wie Sie arbeiten laut auf, wie ein problem, vielleicht mit Tipps, um zu sehen, ob Sie jede Sprache-lawyering Kompetenz in allen-die sind etwas Wert.
- "Mal sehen, wenn er geht und stellt die Frage auf StackOverflow. Wenn er das tut, dann lassen Sie ihn einstellen, denn das wäre die richtige und angemessene Verhalten während der Arbeit auf einem tatsächlichen Projekt!"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diesen code
nicht ganz sicher, warum dies funktioniert, aber der compiler sagt
und ich gehe davon aus, dass für die zweite Zeile,
toString
für das Objekt aufgerufen wird.EDIT:
Macht es Sinn, da die
+=
Betreiber ist es sinnlos, auf ein Allgemeines Objekt. In meinem Beispiel, und ich warf eine int zu einem Objekt, aber es hängt nur vonx
Typ Objekt:Es funktioniert nur, wenn
x
ist Objekt, obwohl, so dass ich eigentlich denke, es ist mehr, dass die String-ist eine direkte Unterklasse von Object. Dieses scheitern wird fürx + y
:für andere Arten, die ich ausprobiert habe.
Ist es nicht möglich.
Nehme an, dass die Art der
x+y
ist Z. #2 erfordert eine casting-Umwandlung von Z nach X; #3 erfordert eine Zuordnung Umwandlung von Z nach X. "casting-Konvertierungen sind umfassender als die Zuordnung von conversions"(1). Daher, solange #3 ist legal, #2 legal ist, und #1 ist legal.Auf der Rückseite, ist es möglich, dass #1 ist legal, aber #3 ist illegal, zum Beispiel
Diese Informationen nicht nützlich ist immer, es ist ein Fehler von Java macht solche überraschende Unterschiede.
(1) http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5
Grundsätzlich funktioniert für Jedes Objekt oder jede nicht-string-primitive und String-Kombination.
Ich Frage mich, welche Firma das war? 🙂
int
im zweiten Fall miti = i + s
gibt einen compile-Fehler.Dieser Sache wird es nicht immer geben Sie Kompilierungsfehler
Wenn Sie das tun, smoething wie diese :
Es funktioniert gut,
selbst wenn Sie
wird es richtig funktioniert.
Aber wenn man x und y zwei verschiedene Arten von Variablen wie :
In solchen Fällen wird das kompilieren fehlschlagen.
*Auch Sie können concatinate jede int, float etc mit String.
x + y
auch nicht und nicht nurx += y
.