System.out.println("== Magic " +o1==o2);;
This is merely a guess.... I have read something about the concatenationf of strings with the variables following them... and I wonder if precedence is getting int he way here.
If this string is being interpreted as "== Magic " + o1 (and the 01 is getting converted to string and concatenated to the "== Magic " string and THEN the == comparison is running against Object o2 and of course it will not equal! What made me suspicious is that the "== Magic " string doesnt even show up in the console output.
Try this instead.... just as a
test....
System.out.println("== Magic " + (o1==o2));;
notice the extra parens around o1==o2....
give it a shot...