У меня есть небольшой класс, который содержит статическую конечную переменную и статическую функцию:Статическая функция возвращает неправильное значение?
public class GlobalConstants {
public static final boolean ONLINE = true;
public static boolean isOnline(){
return ONLINE;
}
}
(конечно есть немного дублирования кода, но не обращайте внимания, что)
Я упаковать свою программу бегущая баночка и получить странный результат:
log.debug(GlobalConstants.isOnline()); //prints false
log.debug(GlobalConstants.ONLINE); //prints true
Я ожидаю, что оба они напечатают «true».
Является ли компилятор java оптимизацией, вызывающей это странное поведение, или я что-то упускаю?
Вы не устанавливаете isOnline, вы устанавливаете ONLINE. – durbnpoisn
Вы действительно использовали этот минимальный пример? Может быть, вы удалили некоторые важные части из кода? Я создал проект и выполнил ваш код. Он работал нормально. –
@Neuron нет, это часть большой программы, но обе строки log.debug вызываются при запуске программы и вызывается друг за другом. Обратите внимание, что в eclipse он работает правильно, только когда я упаковываю его в runnable jar, строки log.debug печатают неправильные значения. –