Java [Eclipse] StringBuilder nimmt kein char UTF-8 auf!

T

Tersus

Gast
Ich versuche dem StringBuilder ein Unicode-Zeichen per Variable vom Typ char zu übergeben. Das funktioniert einfach nicht. Es wird nicht zum StringBuilder hinzugefügt!

Code:
public static void main(String[] args){
	
	char unicode = '╒'; // Unicode-Zeichen. Ich hoffe, es wird in eurem Browser dargestellt.
	
	StringBuilder SB = new StringBuilder(unicode);
	
	System.out.println(SB);

}
 
Es gibt keinen Konstruktor StringBuilder(char), daher musst du dein char erst zu String casten, z.B.: new StringBuilder("" + unicode)
 
Aus der -class Datei:
Code:
invokespecial java.lang.StringBuilder(int) [18]
Ich würde mal behaupten, da wird dein char zu einem int auto-gecastet. Deswegen funktioniert es und der StringBuilder ist leer.

Mit String-casting wird daraus das hier:
Code:
 12  invokespecial java.lang.StringBuilder() [18]
    15  iload_1 [unicode]
    16  invokevirtual java.lang.StringBuilder.append(char) : java.lang.StringBuilder [19]
    19  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [23]
    22  invokespecial java.lang.StringBuilder(java.lang.String) [27]
 
Tersus schrieb:
Und warum beschwert sich Eclipse nicht, bzw. compiliert sogar noch? :freak:

Dafür gibt's keinen Grund, char castet implizit zu int, da ein char intern auch nur eine Ganzzahl repräsentiert, allerdings nur 2 Byte hat (widening conversion).

Du kannst ja mal spaßeshalber die Methode capacity auf deinem StringBuilder-Objekt aufrufen, nachdem du den char im Konstruktor übergeben hast. Da wirst du mit Erschrecken feststellen, dass dein leerer StringBuilder eine Größe von 9554 aufweist. Das ist die Zahl, die deinem Sonderzeichen "╒" in Unicode entspricht :)

edit: also ich denke es ist offensichtlich, aber was ich sagen wollte ist, dass du den int-Konstruktor aufgerufen hast, siehe Darlis.
 
Zuletzt bearbeitet:
Zurück
Oben