Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Is This the Correct Object?

DZone's Guide to

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.

· Java Zone
Free Resource

Download Microservices for Java Developers: A hands-on introduction to frameworks and containers. Brought to you in partnership with Red Hat.

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

Download Building Reactive Microservices in Java: Asynchronous and Event-Based Application Design. Brought to you in partnership with Red Hat

Topics:
java ,objects ,integers

Published at DZone with permission of Dan Newton, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}