A fellow moderator asked me to weigh in on this question at CodeRanch. The gist is whether this code creates one String or two:
1 | String s = " " + 3 ; |
How to find out the answer
The most definitive way to verify this is to check the bytecode. I had downloaded the bytecode plugin when working on our Java 8 OCA Study Guide because sometimes you just have to know what actually goes on behind the scenes to be accurate.
Using the plugin is easy. You go to Window -> Show View -> Other -> Java -> Bytecode. Then every time you save the Java file, the bytecode window is automatically updated. Great for lots of iterations.
The test
I wrote a simple Java class:
1 2 3 4 5 6 | package jb; public class PlayTest { public static void main(String[] args) { String s = "" + 3 ; } } |
The generated bytecode is:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // class version 52.0 (52) // access flags 0x21 public class jb/PlayTest { // compiled from: PlayTest.java // access flags 0x1 public <init>()V L0 LINENUMBER 4 L0 ALOAD 0 INVOKESPECIAL java/lang/Object.<init> ()V RETURN L1 LOCALVARIABLE this Ljb/PlayTest; L0 L1 0 MAXSTACK = 1 MAXLOCALS = 1 // access flags 0x9 public static main([Ljava/lang/String;)V L0 LINENUMBER 8 L0 LDC "3" ASTORE 1 L1 LINENUMBER 14 L1 RETURN L2 LOCALVARIABLE args [Ljava/lang/String; L0 L2 0 LOCALVARIABLE s Ljava/lang/String; L1 L2 1 MAXSTACK = 1 MAXLOCALS = 2 } |