Implizite Konversion in String
-
Warum geht
String a; a = 1;
nicht?
Oder folgendes:
class BigInt { private String text; BigInt(String d) { text = new String(d); } BigInt(int i) { text = Integer.toString(i); } void print() { System.out.println(text); } String toString() { return new String(text); } BigInt add(BigInt b) { String tmp = b; // <- Warum geht das nicht? return new BigInt("100"); } }
-
Die Klasse macht für mich ehrlich gesagt nicht viel Sinn.
Du kannst einem String nicht einfach ein Objekt zuweisen.
Du hast doch schon toString() implementiert.String tmp = b.toString();
-
> Du kannst einem String nicht einfach ein Objekt zuweisen.
Weißt du etwa nicht das toString keine "gewöhnliche" Methode ist?
Methode toString:
Objekt verfügbar wo String gebraucht: Automatischer Aufruf der Methode "toString" mit der Schnittstelle:
public String toString();class BigInt { private String text; BigInt(String d) { text = new String(d); } BigInt(int i) { text = Integer.toString(i); } void print() { System.out.println(text); } public String toString() { return new String(text); } BigInt add(BigInt b) { String tmp = b + ""; // <- Funktioniet - cool oder nicht? return new BigInt("100"); } }
-
Warum geht
String a; a = 1;
nicht?
Das ist leicht zu erklären: Es gibt keine implizierte Konvertierung von <Werttyp> in <Referenztyp>.
Du wunderst dich jetzt wahrscheinlich, warum
String myString = "uksgdf" + 5;
geht. Das liegt einzig und allein daran, dass "sudfhsö" + 5 nicht so stehenbleibt.
Der Compiler macht daraus
String myString = (new StringBuffer()).append("skugf").append(5).toString();
Sogar das Literal "uksgf" bleibt so nicht stehen. Der Compiler macht daraus
new String(new char[] {'u', 'k', 's', 'g', 'f'})
-
Weißt du etwa nicht das toString keine "gewöhnliche" Methode ist?
Öhm, ich habs dir doch erklärt. Deine Zuweisung geht halt einfach nicht.
Und die Methode toString() (aus Object wie du wohl auch weisst) soll halt eine geeignete String-Repräsentation eines Objekts liefern. Und dann kannst du an einen String zuweisen!
-
ok sorry...