Referenzvariablen

Status
Nicht offen für weitere Antworten.

herrlado

Neues Mitglied
Moin!
Bin Java Anfänger, habe vorher ein bischen C++ programmiert.
Meine Frage ist:
Was ist unterschied zwischen diese zwei deklarationen:
Code:
String text="bla"; 
 String text= new String("bla");

Im Buch lese ich, das String eine "Referenzvariable" ist und muss mit new deklariert werden, aber ohne new geht auch, habe ich mal probiert.
Danke!
 

Isaac

Bekanntes Mitglied
Nicht ganz, was dieses Beispiel verdeutlicht.

Code:
public class Stringtest
{
    public static void main(String[] args)
    {
        String test1 = "bla";
        String test2 = "bla";
        String test3 = new String("bla");
        System.out.println(test1 == test2);
        System.out.println(test1 == test3);
    }
}


test1 und test2 zeigen intern auf den selben String da Strings in Java unveränderlich sind. Deshalb ist test1 == test2 true. Mit new erzeuge ich explizit einen neuen String und test2 == test3 ist false.

Strings mit new zu erzeugen ist extrem unüblich und das Buch in dem steht das man das so machen soll ist schlecht. Strings werden nur dann mit new deklariert wenn man unbedingt einen neuen, unabhängigen String braucht. Mir ist bisher nie ein solcher Fall untergekommen. Aber das heist nicht das es ihn nicht gibt.


P.S: Stringvergleiche trotzdem nur mit equals weil die obige Situation nur deshalb geht weil ich in der selben Klasse bin. Hast du mehrere Klassen und test1 ist in Klasse A deklariert und test2 in Klasse B dann wird test1 == test2 auch false sein.
 
R

Roar

Gast
Illuvatar hat gesagt.:
Es gibt keinen Unterschied, der Compiler ersetzt das erste implizit durch das zweite.

ne auch nicht, der Compiler ersetzt "bla" durch new String(new char[]{'b','l','a'}); (soweit ich weiß)

Strings werden eigentlich nie durch new String("bla"); erstellt, da die VM da 2 instanzen von String anlegt...

@Isaac: dazu view FAQ, Strings vergleichen ;)
 

Illuvatar

Top Contributor
Roar hat gesagt.:
Illuvatar hat gesagt.:
Es gibt keinen Unterschied, der Compiler ersetzt das erste implizit durch das zweite.
ne auch nicht, der Compiler ersetzt "bla" durch new String(new char[]{'b','l','a'}); (soweit ich weiß)
Strings werden eigentlich nie durch new String("bla"); erstellt, da die VM da 2 instanzen von String anlegt...
@Isaac: dazu view FAQ, Strings vergleichen ;)

[schild=10 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]KLUGSCHEIßER[/schild]
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben