I have a boolean vector with random entries. I mutate it with an invert method. One does it with the traditionally for loop. The other uses foreach.
Why does invert2() not work as invert1()? I thought that b in invert2() is a reference on a boolean element in the vector. Therefore I tried to use Boolean as an object as well.
Is b something like vector[i].clone(), where i is a loop variable?
BooleanVector.java
public final class BooleanVector {
    private boolean[] vector;
    private Stack<boolean[]> undoStack = new Stack<>();
    public BooleanVector(final int vectorSize) {
        this.vector = new boolean[vectorSize];
        //Generates random Array for test purposes
        Random random = new Random();
        for (int i = 0; i < vector.length; i++) {
            vector[i] = random.nextBoolean();
        }   
    }
    public void invert1() {
        for (int i = 0; i < this.vector.length; i++) {
            this.vector[i] = !this.vector[i];
        }
    }
    public void invert2() {
        for (Boolean b : vector) {
            b = !b;
        }
    }
    public void printVector() {
        System.out.println(Arrays.toString(this.vector));
    }
}
Main.java
public class Main {
    public static void main(String[] args) {
        BooleanVector vector = new BooleanVector(5);
        vector.printVector();
        System.out.println("Invert1");
        vector.invert1();
        vector.printVector();
        System.out.println("Invert2");
        vector.invert2();
        vector.printVector();
        System.out.println("Invert1");
        vector.invert1();
        vector.printVector();
    }
}
Output:
[true, true, false, true, false]
Invert1
[false, false, true, false, true]
Invert2
[false, false, true, false, true]
Invert1
[true, true, false, true, false]
 
    