Is This the Correct Object?
MVB Dan Newton shows off a new issue he came across at work. Even the pros can get stumped sometimes.
Join the DZone community and get the full member experience.
Join For FreeThis is something I came across at work that wasn’t working as I expected. After a little playing around it seemed pretty obvious but even after a few years of working with Java this wasn’t a situation I came across before.
Now what happened? Its way easier to show you an example first.
public class AssigningObjects {
public static void main(String[] args) {
Integer a = 1;
Integer b = a;
Integer c = 2;
a = 3;
a = c;
System.out.println("a = " + a); // prints 2
System.out.println("b = " + b); // prints 1
System.out.println("c = " + c); // prints 2
c = 4;
System.out.println("a = " + a); // prints 2
System.out.println("c = " + c); // prints 4
c = null;
System.out.println("a = " + a); // prints 2
System.out.println("c = " + c); // prints null
}
}
So the problem I had… I thought that if b = a and a = c then b = c, so by changing c‘s value b will also change. But this is not the case. What actually happens is a refers to an underlying object (which is the Integer 1) and by assigning b to a, b now also refers to the same object. When a is assigned to c the underlying object a refers to has now changed, but this does not affect b which will still have the value 1 as the object it is pointing to has not changed.
Anyway this is just something small that I found interesting as I never actually ran into this situation before and when I told my colleague I wanted to tell him something interesting he told me to go away… so I told you instead!
Published at DZone with permission of Dan Newton, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments