Frage zu übergebenem Vector bzw. Boolean

hahawall

Mitglied
Hallo. Ich habe folgendes Programm:


Ich übergebe der Klasse Test2 einmal ein Boolean und einmal einen Vector aus Test, verändere beide dann durch Druck auf die Leerzeichen-Taste und lasse deren Werte einmal aus Test und einmal aus Test2 ausgeben. Nun das Problem: Wenn ich den Vector in Test vergrößere vergrößert dieser sich auch in Test2. Der Boolean allerdings verändert sich nur in Test und NICHT in Test2, was ich aber möchte.

Hier ein Auszug aus der Ausgabe des Programms.

"Key Pressed Test: false
Vector Size Test: 0
Key Pressed Test2: false
Vector Size Test2: 0
Key Pressed Test: false
Vector Size Test: 1
Key Pressed Test2: false
Vector Size Test2: 1
Key Pressed Test: true
Vector Size Test: 1
Key Pressed Test2: false
Vector Size Test2: 1"

Wie man sieht ist die Größe der Vektoren in beiden Klassen immer gleich, die Werte der Boolean aber nicht. Warum ist das so und wie schaffe ich es dass auch der Boolean in beiden Klassen gleich ist?

Hier der Code:

Klasse Test:
Java:
package test;

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JPanel implements KeyListener{

    private JFrame frame;
    
    private boolean key_pressed = false;
    Vector<Test2> vector = new Vector<Test2>();
    
    private Test2 test2 = new Test2(key_pressed, vector);
    
    public Test() {
        
        frame = new JFrame();
        
        setPreferredSize(new Dimension(400, 400));
        addKeyListener(this);
        setFocusable(true);
        requestFocus();
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        frame.pack();
        frame.setVisible(true);
        
        while(true) {
            System.out.println("Key Pressed Test: " + key_pressed);
            System.out.println("Vector Size Test: " + vector.size());

            test2.Test_key_pressed();
        }
        
    }
    
    public static void main(String[] args) {
        new Test();
    }

    @Override
    public void keyPressed(KeyEvent ke) {
        int k = ke.getKeyCode();
        
        
        if(k == KeyEvent.VK_SPACE) {
            key_pressed = true;
        }
        
        vector.add(new Test2());
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        int k = ke.getKeyCode();
        
        
        if(k == KeyEvent.VK_SPACE) {
            key_pressed = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent ke) {
        
    }
}

Klasse Test2:
Java:
package test;

import java.util.Vector;

public class Test2 {
    private boolean key_pressed;
    private Vector<Test2> vector;
    
    public Test2() {
        
    }
    
    public Test2(boolean key_pressed, Vector<Test2> vector) {
        this.key_pressed = key_pressed;
        this.vector = vector;
    }
    
    public void Test_key_pressed() {
        System.out.println("Key Pressed Test2: " + key_pressed);
        System.out.println("Vector Size Test2: " + vector.size());
    }
}
 
Java kennt kein Call-By-Reference, von daher wirst du da nicht weiterkommen. Du kannst ja aber immer wieder den aktuellen Wert setzen.
Allerdings ist mir der Sinn dieses Codes schleierhaft. Du übergibst an Test2 ein Vector<Test2>? Was soll Test2 überhaupt für ein Zweck haben?
 
Aber warum verhalten sich der Vektor und der Boolean unterschiedlich obwohl ich mit beiden das gleiche mache? Der Vector verändert sich ja in beiden Klassen gleich, der Boolean aber nicht.

Dieses Programm hat natürlich keine sinnvolle Funktion außer der mein Problem zu schildern.
 
Weil du beim Vektor nicht die Referenz, sondern den Inhalt des Objektes veränderst. Und boolean ist generell ein primitiver Datentyp, da gibt es überhaupt keine Referenz.
 

Neue Themen


Zurück
Oben