Is this the correct object?

java

This 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!

Dan Newton
Written by Dan Newton
Twitter
LinkedIn
GitHub