# Unterschied zwischen String & Stringbuffer!



## Agent_Smith (18. Mrz 2008)

Hallo ich hab mal die Geschichte in meinem Buch über String und Strinbuffer durchgelesen und dort steht, das man einen String nicht verändern kann und das es konstant bleibt, also nimmt man einen Stringbuffer um den Wert zu verändern.
aber ich habe es im JavaEditor ausprobiert und man kann einen String verändern.

kann mir mal das jemand erklären ???


----------



## SlaterB (18. Mrz 2008)

einen String kannst du nicht verändern,
höchstens einen anderen String in die gleiche Variable schreiben,

das ist aber was anderes, z.B. bekommen davon andere Stellen des Codes, die auf das alte Objekt referenzieren, nix mit


```
public class Test
{
    private String st;
    private StringBuffer b;

    public Test(String st, StringBuffer b)
    {
        this.st = st;
        this.b = b;
    }

    public String toString()
    {
        return st + ", " + b;
    }

    public static void main(String[] args)
        throws Exception
    {
        String st = "Hello";
        StringBuffer b = new StringBuffer("World");
        Test test = new Test(st, b);
        System.out.println(test);
        st = "was";
        b.setLength(0);
        b.append("anderes");
        System.out.println(test);
    }
}
```


----------



## ARadauer (18. Mrz 2008)

du veränderst nicht den string sondern es wird ein neuer erstellt.
String b= "xxx";
String a = "bier"+b;

das sind glaub ich 3 strings: a, "bier", b,

wenn du in einer schleife 1000 mal an einen string einen buchstaben ahängst, dann hast aufeinmal 1000 Objekte... das kann inerhalb von schleifen so enormen geschwindigkeits problemen führen....


----------



## Agent_Smith (18. Mrz 2008)

ach so ist das gemeint, ach noch ne frage ich wollte mal die Stringbuffer-Funktion ausprobieren aber er zeigt mir einen Fehler an, soll ich damit es funktioniert irgendetwas importieren??
Das Buch was ich über Java lese ist voll Sch....!!!^^
ist umständlich geschrieben für einen Anfänger wie mich.


----------



## SlaterB (18. Mrz 2008)

für StringBuffer musst du nix importieren,
siehe auch mein Beispiel in der ersten Antwort,

bei Fehler poste Code + Fehlermeldung,
idealerweise natürlich vorher selber nachdenken


----------



## Agent_Smith (18. Mrz 2008)

schon klar danke ^^


----------



## MASTERmind (18. Mrz 2008)

Beispiel:

```
String a ="Hallo Du da";
a.toLowerCase();
System.out.println(a);
```

Kommt trotzdem : "Hallo Du da" raus, weil Strings immutable!


----------



## sparrow (18. Mrz 2008)

MASTERmind hat gesagt.:
			
		

> Beispiel:
> 
> ```
> String a ="Hallo Du da";
> ...





Der Vergleich hinkt mir zu sehr.
Es wäre auch problemlos möglich eine String-Klasse im schreiben in der das von dir gezeigt Beispiel funktioniert.
Hier ist ja nur spezifiziert, dass .toLowerCase() ein neues String-Objekt zurück gibt.


Gruß
Sparrow


----------



## SlaterB (18. Mrz 2008)

> eine String-Klasse im [zu?] schreiben 

was ist denn 'eine String-Klasse'?
die von Java ist final, da geht das dann intelligenterweise nicht


----------



## Pappenheimer++ (18. Mrz 2008)

Wenn man die von dir erwähnte "String-Klasse" schreiben würde, wäre das Ergebnis ja wieder der StringBuilder/Buffer. Ein Teufelskreis  :lol:


----------



## sparrow (18. Mrz 2008)

Sorry für den Typo.

Ich will ja auch nicht sagen, dass mastermind unrecht hat. Im Gegenteil.
Nur ist das gewählte Beispiel IMHO für Agent_Smith wenig hilfreich ist, denn wenn er die API zur Rate zieht, dann wird er sehen, dass die Methode einen String zurück gibt und somit ja keine Veränderung an dem bestehenden String vorgenommen wird. Daher hinkt es meiner Meinung nach.

Gruß
Sparrow


----------



## volker_2 (27. Mrz 2008)

```
package all;

public class Start
{
	public static void main(String[] args)
	{
		String v = new String("java");
		System.out.println(v);
		v = "peter";
		System.out.println(v);
	}
}
```


----------



## SlaterB (27. Mrz 2008)

SlaterB hat gesagt.:
			
		

> einen String kannst du nicht verändern,
> höchstens einen anderen String in die gleiche Variable schreiben,
> 
> das ist aber was anderes, z.B. bekommen davon andere Stellen des Codes, die auf das alte Objekt referenzieren, nix mit



Beispiel siehe erste Antwort bzw lies dir den ganzen Thread durch


----------



## maki (27. Mrz 2008)

sparrow hat gesagt.:
			
		

> Sorry für den Typo.
> 
> Ich will ja auch nicht sagen, dass mastermind unrecht hat. Im Gegenteil.
> Nur ist das gewählte Beispiel IMHO für Agent_Smith wenig hilfreich ist, denn wenn er die API zur Rate zieht, dann wird er sehen, dass die Methode einen String zurück gibt und somit ja keine Veränderung an dem bestehenden String vorgenommen wird. Daher hinkt es meiner Meinung nach.


.. und wenn eer die API Doc für String liest, merkt er auch, dass Strings nciht verändert werden können, immutables eben.
Wieso sollte der Vergleich hinken??



> Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared. For example.....


----------



## volker_2 (27. Mrz 2008)

Hat gerade Klick gemacht ... sorry !!!
Jetzt hab selbst ich es begriffen ;P


----------

