I've been pulling my hair out with this all day. Probably a newb error of some sort, but I can't get my head around it.
It started out more complicated, but I've simplified it to:
public class Main {
static ArrayList<Selection>[] a = new ArrayList[2];
public static void main(String[] args) {
// Initialise the Selection ArrayList
for (int i=0; i < a.length; i++) {
a[i] = new ArrayList<Selection>();
}
callTest();
}
public static void callTest () {
a[0].add(new Selection(true));
a[1].add(new Selection(false));
System.out.println(a[0].get(0).getTF());
System.out.println(a[1].get(0).getTF());
}
}
class Selection {
private static boolean trueFalse;
public Selection (boolean iTF) {
trueFalse = iTF;
}
public boolean getTF () {
return trueFalse;
}
}
Running the program will return:
false
false
instead of the expected (at least to me):
true
false
Can someone please shed some light on this? It appears that whenever the value held in a Selection object is altered, ALL the Selection objects are altered, even though they have a different object reference. Have I done something silly?
It's because truefalse
is static, part of the class and not part of the object. So there's only one truefalse
value for all of the Selection objects, and it just gets altered every time a constructor is called. You'll want to remove the static modifier, then all should work as planned!
To avoid problems like this in future, it's best at least while you're starting out to not declare things as static like this - keep to objects where you possibly can, even when you know you're only creating one! This gets you in a nice OO mindset and reduces these types of problems. Of course, there are places where you need to use it and it's the right thing to do, but you'll learn that as you go along.
This is because in Selection
you declare trueFalse
as a static variable. Simply change it to :
class Selection {
//one per Selection, versus a global variable
private boolean trueFalse;
public Selection (boolean iTF) {
trueFalse = iTF;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With