identität vs gleichheit

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hey,
eigentlich dachte ich, ich verstehe den unterschied. laut meinem skript:

== vergleicht auf identität, d.h. gleiche speicherstelle im hauptspeicher (bei objekten jetzt).
equals vergleicht auch gleichheit, also ob z.B. das herz ass gleich der herz 9 ist (braucht also je nach anwendung auch ein override)

so, jetzt aber:

String s1 = "hallo";
String s2 = "hallo";

System.out.println(s1 == s2)

ergibt: TRUE

warum denn das? ich dachte, man soll Stringsmit equals vergleichen, wieso ergibt nun aber auch mit == true?
Strings sind doch eigentlich auch (halb-)Objekte in Java oder? Und sie sind nicht veränderbar, d.h. er müsste doch für s1 und s2 zwei Objekte im Hauptspeicer angelegt haben.
Aber dann müsste die Identität (==) doch false sein?

Wieso ist es aber bei Strings nicht so?
 
M

maki

Gast
Strings sind echte Objekte in Java, nix halbes.

Allerdings werden String vom Compiler extrem optimiert, wenn zB in einer Klasse 2mal das gleiche String literal gefunden wird:
Code:
String eins = "test";
String zwei = "test";
optimiert der Comiler so, dass es nur ein einziges String Objekt mit dem Wert "test" gibt.

Hast dir leider ein schlechtes Beispiel ausgesucht für deinen Test ;)

Anders ist es natürlich wenn die Strings erst zur Laufzeit erzeugt werden, zB über Konsoleneingaben ;)
 

Pappenheimer++

Bekanntes Mitglied
guck mal, das hier gibt false:
Code:
public class Test
{
	
		public static void main (String args[])
		{
			String s1=new String("hy");
			String s2=new String("hy");
			System.out.println(s1==s2);
		}
}
 

JavaFred

Aktives Mitglied
maki hat gesagt.:
Anders ist es natürlich wenn die Strings erst zur Laufzeit erzeugt werden
Exakt! Man betrachte z.B. den folgenden Code:

Code:
public static void test()
{
    String s = "hallo hallo";
    String[] a = s.split(" ");
    System.out.println(a[0]);
    System.out.println(a[1]);
    System.out.println(a[0] == a[1]);
    System.out.println(a[0].equals(a[1]));
}

Das Programm produziert die folgende Ausgabe:

hallo
hallo
false
true
 
M

maki

Gast
Pappenheimer,

so erzeugt man doch keine Strings in Java, zumindest ist es unüblich, denn es werden 2 Strings pro Zeile erzeugt und die tollen Compiler Optimierungen sind nicht anwendbar ;)

anstatt:
Code:
String s1=new String("hy");
sollte es so lauten:
Code:
String s1 = "hy";
Der Compiler macht aus "hy" schon einen String, das new sorgt dafür das dann zur Laufzeit noch einer erzeugt wird... nicht das wahre.
Hilft vielleicht beim Testen, sollte man sich aber auf gar keinen Fall angewöhnen, schlechter Stil.
 

Leroy42

Top Contributor
Ich denke nicht, daß Pappenheimer das selbst so schreibt.

Er wollte doch nur ein Beispiel geben, wo == ein false liefert.
 

Wildcard

Top Contributor
equals ist total aus der Mode. Die Sache geht so:
Code:
public class Test
{
   
      public static void main (String args[])
      {
         String s1=new String("hy");
         String s2=new String("hy");
         System.out.println(s1.intern()==s2.intern());
      }
}
:wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Gleichheit und Identität von Strings Java Basics - Anfänger-Themen 2
A Gleichheit überprüfen Java Basics - Anfänger-Themen 8
T Diagonale von 2DArray auf gleichheit überprüfen Java Basics - Anfänger-Themen 2
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
M String auf Gleichheit mit Arraystrings vergleichen Java Basics - Anfänger-Themen 4
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
X Objekte auf gleichheit prüfen Java Basics - Anfänger-Themen 5
R Collections Text-Dateien auf Gleichheit überprüfen Java Basics - Anfänger-Themen 22
S Objektidentität und gleichheit an diesem Beispiel Java Basics - Anfänger-Themen 7
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
A Elemente 2er int[] auf Gleichheit und Position überprüfen Java Basics - Anfänger-Themen 7
H Dates "Tage" auf gleichheit prüfen? Java Basics - Anfänger-Themen 4
C gleichheit von objekten Java Basics - Anfänger-Themen 20
C Objekte auf gleichheit vergleichen Java Basics - Anfänger-Themen 3
M wertmäßige gleichheit Java Basics - Anfänger-Themen 15
C String soll auf gleichheit (=teilweise) überprüft Java Basics - Anfänger-Themen 5
H strings auf gleichheit / ungleichheit prüfen wer kann helfen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben