I think the answer depends on when String literals get created. Without checking the Java Language Specification to be sure, I believe String literals are created when the class is loaded. If this is right, then the answer is 3.
If however, String literals are created when a line containing that literal is executed, then the answer cannot be determined. All String literals are pooled, therefore if another piece of code containing "Fred" and "47" has already been executed, then these String literals will already exist and will not be recreated by this code. Therefore the answer would be 3. If however, neither of the literals had already been created, then the answer would be 5. And if only one of the literals had already been created the answer would be 4.
Assuming this is not a trick question and that the options of 'the answer cannot be determined' is not available, leads me to believe that my vague memory that String literals are created when the class is loaded is correct. So the answer is 3.
Joanne
Senthil Kumaran
Ranch Hand
Joined: Aug 24, 2008
Posts: 32
posted
0
by the way whats the correct answer, as by question number of created strings, would be 4 right, adding tostring method then its five
The SCJP answer is 5: two literals, the concatenation, and the calls to substring and toUpperCase. toString doesn't return a new String.
But outside of the SCJP exam, these kinds of questions are totally meaningless; in no sense does any "creating" of the two String literals happen while this code is executing. So the "real" answer is 3.
But as I suspect we're talking SCJP here, go with 5, and I'll move this to the SCJP forum, to boot.
The simple rule is Strings in java are immutable, that is they can never change. Even if it looks like you are changing a string you are not you are creating a new string, and / or moving the reference variable to the new string. If the String is a literal and the JVM finds a match in the pool then the reference simply points to the existing literal.
so 4 new objects created here! Hope this helps
be a well encapsulated person, don't expose your privates, unless you public void getWife()!
Suresh K Babu
Greenhorn
Joined: Feb 10, 2007
Posts: 16
posted
0
4 string objects are created...
1. Fred
2. Fred14
3. ed1
4. ED1
Raf Szczypiorski
Ranch Hand
Joined: Aug 21, 2008
Posts: 383
posted
0
Ernest is right, it is 5:
2 literals: "Fred" and "47"
then 3 others: Fred47, ed4, ED4.
Stephen Davies
Ranch Hand
Joined: Jul 23, 2008
Posts: 352
posted
0
How so 5?
I make that 4. The toString() method does not create a new String Object
This question has been asked and discussed numerous times before here on JavaRanch. Please do a search, and search for "Fred 47" - you'll find a lot of discussions about this question.
"47" is used in concatenation, that's right. But, it is also used as a literal, so it is put into the pool internally. So, "Fred" and "47" are in the pool, and "Fred47" is the third one. Then there is the substring and toUpperCase.
I agree. Here's the link: http://ej-technologies/jprofiler - if it wasn't for jprofiler, we would need to
run our stuff on 16 servers instead of 3.
subject: How many String Objects are created by executing the following method