Antworten auf deine Fragen:
Neues Thema erstellen

Was ist der unterschied vom Java-String zu Stringlitheral?

bisskraft

Nicht mehr ganz neu hier

Hi alle zammen, kann mir jem den unterschied sagen in einfachen Worten, ich weiß, dass Java-String ne 16 bit Zeichenkette ist und mit new erzeugt wird. Das litheral an sich wird ohne new erzeugt, was ist der unterschied?
 

cebito

undefined

AW: Was ist der unterschied vom Java-String zu Stringlitheral?

Java - lang ist's her (fast 10 Jahre), aber ich versuchs mal...

String ist eine Klasse in java, mit new erzeugst du eine Instanz davon. Ein literal hingegen ist ein einfacher "String" (Text in Anführungszeichen), wie er in allen gängigen Programmiersprachen verwendet wird.

Ohne Gewähr - ist echt schon lang her... und gebraucht hab ich's auch nicht mehr ;)
 

bisskraft

Nicht mehr ganz neu hier

AW: Was ist der unterschied vom Java-String zu Stringlitheral?

super das reicht schonmal :)

ich hätt da aber leider doch noch paar andre Fragen :)

Was versteht man unter einer short circuit evalution? und was ist ein dangling-else-Problem ?

wär super wenn ihr mir helfen könntet!!!
 
C

cracko

Guest

AW: Was ist der unterschied vom Java-String zu Stringlitheral?

was ist der unterschied?
Strings können in Java auf zwei verschiedene Arten erzeugt werden, mit new oder mit einem Literal. Für den Compiler besteht hier jedoch kein Unterschied, denn alle Stringliterale werden in Java als Instanz der Stringklasse implementiert.

Entscheidend ist das Ganze sobald es zu Vergleichen von Strings kommt, z.B.:
Code:
String s1 = "Hallo"; // Stringliteral und Instanz der Stringklasse
String s2 = "Hallo";
String s3 = new String("Hallo"); // eine neue Instanz der Stringklasse

Nun die Vergleiche. In Java werden Vergleiche mit dem == Operator durchgeführt. == vergleicht Referenzen auf ein Objekt. Um den Inhalt zweier Stringobjekte zu vergleichen, muss equals(s) benutzt werden.

Code:
s1 == s2 // true, da dieselbe Referenz
s1.equals(s2) // true, da derselbe Inhalt des Objekts
s1 == s3 // false, verschiedene Referenzen
s1.equals(s3) // true, derselbe Inhalt

Edith sagt:
Zu Deinen beiden anderen Fragen hat Wikipedia sehr gute Antworten, wie ich finde, darum zitiere ich das einfach mal.

"Kurzschlussauswertung (Short Circuit Evaluation) ist ein Begriff aus der Informatik und betrifft das Auswerten von booleschen Ausdrücken. Dabei wird das Auswerten eines Ausdrucks abgebrochen, sobald das Ergebnis feststeht."
Das heisst, hier geht es um Optimierung. Sobald das Ergebnis des booleschen Ausdrucks feststeht, bricht die Überprüfung ab, selbst wenn nicht alle Parameter ausgewertet wurden, siehe die Beispiele auf Wikipedia.

Dangling else: "Das Problem des dangling else (engl. dangling = baumelnd) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den meisten Sprachen eindeutig definiert, schon weil die Grammatik der Sprache sonst nicht eindeutig zerlegbar wäre. Das Problem taucht in einigen Programmiersprachen (wie C, C++, Java) auf, wenn zwei verschachtelten if-Anweisungen nur ein else-Zweig gegenübersteht. Es kann nur auftreten, wenn eine optionale Klammerung weggelassen wird."

Auch hier einfach mal die Beispiele auf Wikipedia angucken, die machen das Ganze gut verständlich. Also, entweder Klammern richtig setzen, was ich persönlich sehr schrecklich an Java finde, oder andere Programmiersprachen nutzen z.B. Python ;-)
 
Zuletzt bearbeitet von einem Moderator:
J

jimmyjammyj

Guest

AW: Was ist der unterschied vom Java-String zu Stringlitheral?

Code:
s1 == s2 // true, da dieselbe Referenz
s1.equals(s2) // true, da derselbe Inhalt des Objekts
s1 == s3 // false, verschiedene Referenzen
s1.equals(s3) // true, derselbe Inhalt

Hi, kleine Nebenfrage, warum ergibt der 1. vergleich true, da s1 und s2 verschiedene Speicherorte haben und sie eig nicht auf den selben verweisen?

Gruß Jimmy
 
C

cracko

Guest

AW: Was ist der unterschied vom Java-String zu Stringlitheral?

Hi, kleine Nebenfrage, warum ergibt der 1. vergleich true, da s1 und s2 verschiedene Speicherorte haben und sie eig nicht auf den selben verweisen?

Gruß Jimmy
Gute Frage ;-) Hierzu muss man betrachten, wie Java mit Strings umgeht. Strings in Java sind unveränderbare Objekte, d.h. wer viel mit Strings in einem Programm arbeiten will, sollte über Speicherplatz nachdenken. Anders als z.B. in C wird einem hier (zumindest bis zu einem gewissen Grad) die Arbeit von der Java Virtual Machine (JVM) abgenommen.

Wie gesagt, Srings sind in Java unveränderbar (immutable). Um nicht zu viele davon im Speicher zu haben, hält die JVM einen Stringpool bereit. Jeder neu erzeugte String kommt da rein. Wenn jetzt, wie in dem Beispiel, ein neuer String erzeugt wird, überprüft die JVM, ob dieser schon vorhanden ist. Ist dies der Fall, wird die Referenz auf diesen gesetzt und kein neues Objekt erzeugt. Daher zeigen s1 und s2 auf dieselbe Referenz im Stringpool.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.636
Beiträge
1.538.484
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben