Error in OCJP exam simulation: how many objects are really created?

java

Solution

You are right that the answer is not 4 objects.

However, the question "how many objects are created" is ambiguous. The issue is that one of the three objects is not created when you execute the code. Specifically, the `String` object that corresponds to the `"abc"` literal is actually created when the code is loaded. When that code is executed, two `StringBuffer` objects are created, and the pre-existing `String` object is used.

And in fact it is more complicated than that, since at class load time it is possible that another temporary `String` object is created and then discarded after it has been interned;

If an `"abc"` literal has already been loaded in a different class, then that one will be used.

It is not specified if the string pool implementation makes a fresh copy of the `String` if it needs to put it into the pool.

Unless the question is more precisely stated, there is no single correct answer. The best you can say is:

- Two `StringBuffer` objects are created when the code is run.

- One or two `String` objects are created when the code is loaded.

Then there is the issue of whether you should count the private `char[]` objects that form part of the `StringBuffer` and `String` objects. That could inflate the object count to as much as 8.

Problem

In a simulation for a the OCJP certification I found this question: ``` 1. StringBuffer s1 = new StringBuffer("abc"); 2. StringBuffer s2 = s1; 3. StringBuffer s3 = new StringBuffer("abc"); How many objects are created ? ``` They state that the correct answer is 4 because they state: ``` s1 is one object, s2 is another object, s3 is another object and "abc" is another String Object . ``` But for me it's wrong and it should be 3, because `s1` and `s2` are the same object. What do you think?

Original source

Related problems