Ну, посмотрите на свой метод:
static void setX(String x){
x="a";
System.out.println("now x should be = "+x);
}
Вы можете игнорировать тот факт, что у вас есть статическая переменная x
, потому что скрытый параметром здесь. Так может и не существовать. Что касается этого метода. Если это то, что озадачивает вас, то исправление удалить параметр целиком:
// In main
setX();
...
static void setX(){
x="a";
System.out.println("now x should be = "+x);
}
Если вы ожидали изменения значения параметра влияет на аргумент, а также ... Все аргументы передаются по значению в Java - это означает, что аргумент оценивается на сайте-вызове и используется как начальное значение для параметра. Но помимо этого аргумент и параметр не связаны - если вы измените значение параметра, то не изменить аргумент.
Людей иногда утверждают, что Java передает аргументы по ссылке, потому что, если тип параметра является изменяемыми ссылочным типом, то вы можете увидеть изменения в объекта, что значение параметра относится, и эти изменения будут видно вызывающим:
StringBuilder builder = new StringBuilder("x");
appendHello(builder);
System.out.println(builder); // Prints xhello
...
static void appendHello(StringBuilder parameter) {
parameter.append("hello");
}
это делает не изменить значение параметра, которое просто ссылка - вы можете сказать, это не изменяет значение параметра, потому что нет никакого оператора присваивания ...
спасибо, я просто забыл о доминировании локальной переменной над переменной класса. – vishesh