/ / Was ist der Unterschied zwischen schwachem Tippen, Autoboxen und erweiterten Conversions? [closed] - Java, PHP, Javascript, Python, Schwachschrift

Was ist der Unterschied zwischen schwachem Tippen, Autoboxing und erweiterten Conversions? [geschlossen] - Java, PHP, Javascript, Python, schwache Eingabe

Es scheint, dass die Definition von schwacher Typisierung (nicht zu verwechseln mit dynamischer Typisierung) darin besteht, dass ein binärer Operator funktionieren kann, wenn beide Werte einen unterschiedlichen Typ haben.

Python-Programmierer argumentieren, dass Python stark typisiert ist, weil 1+"hello" wird scheitern, anstatt leise etwas zu tunsonst. Im Gegensatz dazu konvertieren andere Sprachen, die üblicherweise als schwach typisiert gelten (z. B. PHP, JavaScript, Perl) einen oder beide Operanden im Hintergrund. Zum Beispiel in JavaScript, 1+"hello" -> "1hello", während in Perl, 1+"hello" -> 1, aber 1+"5" -> 6.

Nun hatte ich den Eindruck, dass Java eine stark typisierte Sprache ist, aber Auto (Un) Boxing und erweiterte Konvertierungen scheinen dem zu widersprechen. Zum Beispiel, 1+new Integer(1) -> 2, hello+"1" -> "hello1", "A"+1 -> 66, und long können automatisch in float umgewandelt werden, obwohl es normalerweise abgeschnitten wird. Ist Java schwach getippt? Was ist der Unterschied zwischen schwacher Eingabe, Autoboxing und erweiterten Conversions?

Antworten:

3 für die Antwort № 1

Schwache Typisierung liegt vor, wenn bestimmte Konvertierungen und Ad-hoc-Polymorphismen implizit durchgeführt werden, wenn der Compiler / Interpreter dies für erforderlich hält.

Autoboxing ist, wenn Literale und NichtobjektTypen werden bei Bedarf automatisch in ihre jeweiligen Objekttypen konvertiert. (Mit Java können Sie beispielsweise Methoden für ein String-Literal aufrufen, als wäre es ein String-Objekt.) Dies hat nichts mit dem Typisierungssystem zu tun. Es ist wirklich nur syntaktischer Zucker, um zu vermeiden, dass Objekte explizit erstellt werden müssen.

Das Erweitern von Conversions ist eine Form schwacher Typisierung. In einer sehr strengen, stark typisierten Sprache ist dies nicht zulässig. In Sprachen wie Java ist dies jedoch zulässig, da es keine negativen Nebenwirkungen hat. Etwas so Winziges wie dies ist kaum genug, um Java nicht länger als stark typisierte Sprache zu betrachten.

Java überlädt auch den Operator + für ZeichenfolgeVerkettung. Es ist definitiv ein Feature, das in schwach getippten Sprachen zu sehen ist, aber nicht groß genug, um Java schwach getippt zu nennen. (Auch wenn ich denke, dass es eine wirklich dumme Idee ist.)