Java - Состояние объекта не меняется после вызова метода [duplicate]

На этот вопрос уже есть ответ:

Является ли Java «передачей по ссылке» или «передачей по значению»? 78 ответов

Beginner Java вопрос, но я не могу понять, как call-по-значению (или ссылка) работает в приведенном ниже примере -

Как получается, что значение String не изменяется после выхода из метода, в то время как мой пользовательский объект String имеет значение. ? То же самое с другими классами, такими как Date ..

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";
}

Ответы на вопрос(5)

Ваш ответ на вопрос