Verständnisproblem mit Foreach

Status
Nicht offen für weitere Antworten.

100mg

Mitglied
Hallo zusammen,

ich habe ein Verständnisproblem bei der FOREACH-Schleife.
Einfach gefragt, warum bringt starteBsp1 ein anderes Ergebnis als starteBsp2? :bahnhof:
Wieso bleiben im ersten Beispiel die Strings eins, zwei und drei = "leer"? :bahnhof:

Mache ich nicht das Gleiche? ;(???:L

Java:
package eachforschleife;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        starteBsp1();
        starteBsp2();
    }

    public static void starteBsp1 (){

        ArrayList<String> lMeineStrings = new ArrayList<String>();
        String eins = "leer";
        String zwei = "leer";
        String drei = "leer";
        lMeineStrings.add(eins);
        lMeineStrings.add(zwei);
        lMeineStrings.add(drei);

        int iCounter = 0;

        System.out.println("Beginn Beispiel 1");

        for (String y : lMeineStrings){
            y="Nr. "+iCounter;
            System.out.println("y" + iCounter + "= " +y);
            iCounter++;
        }

        System.out.println("-------------");
        System.out.println("eins= " + eins);
        System.out.println("zwei= " + zwei);
        System.out.println("drei= " + drei);
        System.out.println("-------------");

    }

    public static void starteBsp2 () {

        ArrayList<MeinObjekt> lMeineObjekte = new ArrayList<MeinObjekt>();
        MeinObjekt eins = new MeinObjekt();
        MeinObjekt zwei = new MeinObjekt();
        MeinObjekt drei = new MeinObjekt();
        lMeineObjekte.add(eins);
        lMeineObjekte.add(zwei);
        lMeineObjekte.add(drei);

        int iCounter = 0;

        System.out.println("Beginn Beispiel 2");

        for (MeinObjekt x : lMeineObjekte){
            x.sName="Nr. "+iCounter;
            System.out.println("x" + iCounter + "= " +x.sName);
            iCounter++;
        }
        
        System.out.println("-------------");
        System.out.println("eins= " + eins.sName);
        System.out.println("zwei= " + zwei.sName);
        System.out.println("drei= " + drei.sName);
        System.out.println("-------------");

    }

}

class MeinObjekt {

    public String sName = "leer";

}

Ergebnis:

Code:
Beginn Beispiel 1
y0= Nr. 0
y1= Nr. 1
y2= Nr. 2
-------------
eins= leer
zwei= leer
drei= leer
-------------
Beginn Beispiel 2
x0= Nr. 0
x1= Nr. 1
x2= Nr. 2
-------------
eins= Nr. 0
zwei= Nr. 1
drei= Nr. 2
-------------

Sorry für den vielen Code, aber ich wusste nicht was reicht um mein Problem darzustellen...

LG 100mg
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
weil die foreach-schleife im beispiel 1:
Code:
for(String s: someStrings){
  s="blup";
}
sinngemäß in sowas übersetzt wird:
Code:
for(int i=0; i<someStrings.length; i++){
  String s=someStrings[i];
  s="blup";
}
was auf die einträge des arrays selbst natürlich keinerlei auswirkungen hat.
 

100mg

Mitglied
Soweit macht das auf jeden Fall Sinn.
Kannst du mir jetzt noch erklären, warum das beim 2. Beispiel dann funktioniert?
Weil bei dem Objekt nur eine Referenz übergeben wird und kein Wert?
 

0x7F800000

Top Contributor
Im ersten Beispiel hast du sowas da stehen:
Java:
y="vbjhbkvhkjb"; //egal was vorher in y war, jetzt ist's weg
d.h. die ursprünglich von y gespeicherte Referenz wird weggeworfen und durch die referenz auf die angegebene Zeichenkette ersetzt. Was du ab da machst, hat einfach nichts mehr mit dem durchlaufenen Array zu tun, weil du ja alle Referenzen auf die Elemente des Arrays sofort verbrennst. Und ändern kannst du an String-Objekten eh nichts, weil sie immutabel sind.

Im zweiten Fall verwirfst du die Referenz auf das "x" nicht, sondern arbeitest mit dieser weiter:
Java:
x.sName="Nr. "+iCounter; //hier wird nur an member-variablen von x rumgefummelt
also werden die Member-Variablen von den im Array erhaltenen x'n verändert, und diese Änderungen sind dann natürlich auch sonst überall sichtbar. Diese x'n sind im unterschied zu String ja auch veränderlich.
 

100mg

Mitglied
Ich glaube ich habe es einigermaßen verstanden.
Auf jeden Fall hast du mich schon mal eine ganze Ecke weiter gebracht...
Den Rest erledigt Goggle ;)

Danke dir...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
M Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator Java Basics - Anfänger-Themen 8
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
A Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
P Iterieren mit einer Foreach in Lambdaschreibweise und Counter. Java Basics - Anfänger-Themen 1
O Alternative zu Stream.forEach() Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
H Bei forEach Index des Elements ermitteln Java Basics - Anfänger-Themen 17
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J Maximum herauskriegen mit foreach Java Basics - Anfänger-Themen 6
F ForEach Schleife Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
L Anonyme Methode in einer ForEach-Schleife Java Basics - Anfänger-Themen 2
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
B Liste mit foreach-Schleife durchgehen Java Basics - Anfänger-Themen 4
S OOP Foreach für Objekte einer Klasse? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben