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]