Hallo, ich hätte eine Frage zum String erzeugen in Java. Mein Code: char[] cs = {'H','A','L','L','O'}; (1) String str1 = new String(cs); (2) String str2 = String.valueOf(cs); Stimmen meine Aussagen ? zu (1) : hier wird ein neues String Objekt erzeugt, welches auf dem Objektheap abgelegt wird Wird für jedes Element des char Arrays ein eigenes Objekt erzeugt und anschliessend zu einem neuen String Element zusammengesetzt ? zu (2) : hier wird im Cache ein String Element erzeugt Wie wird hier der str2 erzeugt ? Und welche von diesen beiden Möglichkeiten sollte ich in meinem Code verwenden bzw. würdet ihr verwenden ?
Hans schrieb: > hier wird ein neues String Objekt erzeugt Ja. Hans schrieb: > Wird für jedes Element ... Siehe: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#String%28char[]%29 Hans schrieb: > hier wird im Cache ein String Element erzeugt Was für ein cache? Es kommt auf jedenfall nicht der String "Hallo" raus. Hans schrieb: > Und welche von diesen beiden Möglichkeiten sollte ich > in meinem Code verwenden bzw. würdet ihr verwenden ? Je nachdem was du vor hast garkeine. Einen String "erzeugt" man einfach indem man einer Stringvariablen ein Stringliteral zuweist also so:
1 | String myString = "Hallo"; |
Ja das mit String = "Hallo"; wusste ich schon, jedoch ist dies nur ein Beispiel gewesen. Ich mache nämlich ein Verschlüsselungsprogramm, dabei bekomme ich einen String nehme die einzelnen Zeichen und verändere sie --> anschliessend möchte ich aus dem char Feld wieder einen String erzeugen und ich würde gerne wissen, welche dieser beiden Methoden verwendet werden sollte. char[] test = {'H','a','l'}; String str = String.valueOf(test); System.out.println(str); --> dies funktioniert bei mir schon
Kein Unterschied... "http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.valueOf(char%5B%5D)" valueOf ruft den normalen Konstruktor auf
In dem Fall würde ich den ersten "Weg" nehmen der Zweite hat den Nachteil falls du mal den Datentyp änderst nicht unbedingt einen Compilefehler erhältst da valueOf noch eine Menge anderer Typen akzeptiert.
Eine String-Objekt ist nicht dynamisch. Bei jeder Änderung wird immer eine neue Kopie des Objekts erzeugt. Bei vielen Manipulationen geht das auf Kosten von Programmspeicher und Laufzeit. Wenn Du intensive Strings manipulieren möchtest, würde ich dir empfehlen auf die Klasse StingBuilder auszuweichen. Gruß
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.