title: Java - Object state does not change after method call
body: <p>Beginner java question, but I cannot understand how call-by-Value ( or Reference ) is working in the example below - </p>
  
  <p>How come the String value is not modified after it exits the method while my custom String Object is. ? Same with other classes like Date..</p>
  
  <pre><code>public class StringMadness {
  
  public static void main(String[] args) {
      String s = "Native String";
      CustomStringObject cs = new CustomStringObject();
      System.out.println("Custom String Before: " + cs.str);
      hello(cs);
      System.out.println("Custom String After: " + cs.str);
  
      System.out.println("Native String Before: " + s);
      hello(s);
      System.out.println("Native String After: " + s);
  }
  
  private static void hello(String t) {
      t = "hello " + t;
  }
  
  private static void hello(CustomStringObject o) {
      o.str = "hello " + o.str;
    }
  }
  
  class CustomStringObject {
  
  String str = "Custom String";
  }
  </code></pre>