title: How does + operator work in Java?
body: <p>I am providing some code below with its compiled class.</p>
  
  <pre><code>public class PlusOperator {
  
  public static void main(String[] args) {
  
      int a=10;
      int b=20;
      int c =a+b;
  
      String s1 = 1+3+"f";
      String s2 = "f"+1+2;
      String s3 = (1+3)+"f";
      String s4 = "f"+(1+3);
  
  }
  }
  </code></pre>
  
  <p>Compiled class with Java 1.6</p>
  
  <pre><code>  // Compiled from PlusOperator.java (version 1.6 : 50.0, super bit)
  public class question.PlusOperator {
  
    // Method descriptor #6 ()V
    // Stack: 1, Locals: 1
    public PlusOperator();
      0  aload_0 [this]
      1  invokespecial java.lang.Object() [8]
      4  return
        Line numbers:
          [pc: 0, line: 3]
        Local variable table:
          [pc: 0, pc: 5] local: this index: 0 type: question.PlusOperator
  
    // Method descriptor #15 ([Ljava/lang/String;)V
    // Stack: 2, Locals: 8
    public static void main(java.lang.String[] args);
       0  bipush 10
       2  istore_1 [a]
       3  bipush 20
       5  istore_2 [b]
       6  iload_1 [a]
       7  iload_2 [b]
       8  iadd
       9  istore_3 [c]
      10  ldc &lt;String "4f"&gt; [16]
      12  astore 4 [s1]
      14  ldc &lt;String "f12"&gt; [18]
      16  astore 5 [s2]
      18  ldc &lt;String "4f"&gt; [16]
      20  astore 6 [s3]
      22  ldc &lt;String "f4"&gt; [20]
      24  astore 7 [s4]
      26  return
        Line numbers:
          [pc: 0, line: 7]
          [pc: 3, line: 8]
          [pc: 6, line: 9]
          [pc: 10, line: 11]
          [pc: 14, line: 12]
          [pc: 18, line: 13]
          [pc: 22, line: 14]
          [pc: 26, line: 16]
        Local variable table:
          [pc: 0, pc: 27] local: args index: 0 type: java.lang.String[]
          [pc: 3, pc: 27] local: a index: 1 type: int
          [pc: 6, pc: 27] local: b index: 2 type: int
          [pc: 10, pc: 27] local: c index: 3 type: int
          [pc: 14, pc: 27] local: s1 index: 4 type: java.lang.String
          [pc: 18, pc: 27] local: s2 index: 5 type: java.lang.String
          [pc: 22, pc: 27] local: s3 index: 6 type: java.lang.String
          [pc: 26, pc: 27] local: s4 index: 7 type: java.lang.String
  }
  </code></pre>
  
  <p>My Questions:</p>
  
  <ol>
  <li>How + operator works with String and int?</li>
  <li>If you see the compiled code then String "+" is evaluated at the time of compilation with int also but in case of "+" only with int is performed at runtime. Why?</li>
  </ol>