Может кто-нибудь проверить, где в этом коде не так? Результат должен быть истинным, но X по-прежнему ложным.
setOn(X , true);
System.out.println(X);
}
public static void setOn(boolean mode, boolean onValue) {
mode = onValue;
}
public static boolean X = false;
Я не могу использовать X = onvalue, потому что у меня есть другой режим.
3 ответа
Метод setOn
получает копию X
и устанавливает для it значение onValue
, но не изменяет исходную переменную X
.
Но ему даже не требуется X
в качестве параметра, предположительно потому, что он уже находится в области видимости в классе, в котором находится этот код. Просто установите для X
значение onValue
без {{X3} } параметр.
public static void setOn(boolean onValue) {
X = onValue;
}
A
не мешает вам установить X
. Если у вас есть несколько переменных boolean
для установки, используйте отдельный метод для каждой, вместо того, чтобы пытаться написать один метод для установки их всех.
X = true
.
Вы не изменили значение X
, потому что setOn()
получил новую копию X
. вы должны сделать что-то вроде этого:
public static void setOn(boolean onValue) {
X = onValue;
}
Расширяя ответ дальше:
- если передано логическое значение, то java работает с вызовом по значению, потому что это базовый тип данных.
- если передано Boolean, тогда java работает с Call by Reference, но поскольку Boolean неизменяем, фактическое значение нельзя изменить, но то, что мы будем использовать, будет новым экземпляром Wrapper для Boolean.
Вы можете воспроизвести ту же проблему, также передав String. вы получите четкое представление о неизменности.
Относятся к неизменяемости java, классам Wrapper и автобоксу.
http://www.javaranch.com/journal/2003/04/immutable.htm
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.