String Objekt erstellen auch ohne new() möglich?

coach

Neues Mitglied
Hallo Leute, ich hoffe mir kann jemand bei folgender Frage helfen.

Das ist der richtige Code:
Java:
class StringTester
{

  public static void main ( String[] args )
  {
    String str;             // str ist eine Variable, die ein Objekt bezeichnet,
                            // aber das Objekt existiert noch nicht.
    int  laenge;            // laenge ist eine primitive Variable vom Typ int

    str = new String("Zufaellige Notizen");  // ein Objekt vom Typ String erzeugen

    laenge  = str.length();  // Aufruf der Methode length() des Objekts str

    System.out.println("Der String ist " + laenge + " Zeichen lang");
  }
}
ich habe den allerdings mal zum testen so umgeschrieben:
Java:
class StringTester
{

  public static void main ( String[] args )
  {
    String str;             // str ist eine Variable, die ein Objekt bezeichnet,
                            // aber das Objekt existiert noch nicht.
    int  laenge;            // laenge ist eine primitive Variable vom Typ int

    str = "Zufaellige Notizen";  <----- HIER MEINE ZUWEISUNG OHNE NEW()

    laenge  = str.length();  // Aufruf der Methode length() des Objekts str

    System.out.println("Der String ist " + laenge + " Zeichen lang");
  }
}
wieso funktioniert das ohne new() genauso? Bzw was wäre da jetzt der Unterschied so wie ich das geschrieben hab?

Oder ist das wie bei C++ das man mit new() die Objekte dynamisch erzeugt und ohne new() statisch?
 
Zuletzt bearbeitet:
nutze bitte die Java tags wie es gross rot geschrieben wird.

Strings sind etwas besonderes. mit oder ohne new ist egal, man erzeugt ein "neues" String objekt (wobei bei ohne new sich aus dem Stringpool bedient wird, somit gecached und somit besser, ergo kein new)
 
Ich denke das new() brauchst du bei String nicht hast du es getestet, wenn was kam raus? Bin zwar selber neu aber wenn ich mich nicht irre wird ein String wie ein primitiver Datentyp initialisiert.
 
allein die Überlegung, was
> new String("Zufaellige Notizen")
bedeutet, läßt es etwas klarer werden, was wird dort als Parameter übergeben?
falls man nicht von reiner Syntax ausgeht, das wäre ja schon schräg,

es wird ein String übergeben, "Zufaellige Notizen" ist selber ein String wie auch in den Ausgaben verwendet,


man könnte auch
> new String(new String(new String(new String(new String("Zufaellige Notizen"))));
schreiben, aber nicht grad sinnvoll..

new wie gesagt praktisch nie, möglich wäre es um ein anderes Objekt gleichen Inhalts zu erhalten
 
Wenn du einen String ohne new erzeugst landet er im Literal Pool. Jedes mal wenn du einen String erzeugst wird erst der Pool durchsucht ob dieser String bereits vorhanden ist. Wenn ja wird eine Referenz auf das bereits vorhandene String-Objekt erzeugt. Wenn nicht kommt der neue String auch in den Pool.
Bei new String("....") wird sofort ein neuer String erzeugt ohne Vergleich...erste Variante ist also zu bevorzugen.


Gruß sam
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben