У меня такой код.Ядро Java Что не так с этим простым синтаксисом
public void test()
{
final boolean passDay = true;
final int status;
//if the right side takes place means i need status value below and is set
//if only the left side is takes place i dont care about status because i will not use it
if(!passDay && ((status=loadStatusValue()))== Constants.YORK_CORK_EMPTY_SET)
System.out.println("inside 1");//I DONT CARE ABOUT STATUS VALUE
else
{
if(passDay)System.out.println("BAMBA");//I DONT CARE ABOUT STATUS VALUE
else
{
//HERE STATUS ALWAYS WILL HOLD A VALUE SIMPLYBECAUSE RIGHT SIDE
//IS ALREADY EVALUATED BECAUSE passDay=false and !passDay=true
System.out.println(status);
//I MEAN I USE STATUS ONLY AFTER BEING INITIALIZED
//WHY variable status might not have been initialized IS SHOW IF I AM HERE IS BECAUSE STATUS HAS A VALUE.
}
}
}
private boolean compute(){return true;}
private int loadStatusValue(){return Constants.BOTH_YORK_CORK_SET;}
Что я думаю, что в этом методе все работы я использовать переменную состояния ИНТ, когда уже был установлен даже не определен в инициализации.
Как вы можете видеть, passDay - это логическое средство, которое может содержать только истину или ложь. Я попробовал hardcoded с ошибкой true и false, а не с компиляцией, показывает, когда отображается ошибка компиляции, вместо этого, когда я делаю что-то вроде hardcode.
final boolean passDay = compute();
фактически вычислить также возвращение булева может быть истинными или ложными, но в этом случае ошибка компиляции показать переменной состоянию не может быть инициализирована но не ява понимать, что даже тогда, когда истинный статус просто не используется, а когда false, переменная статуса инициализируется или устанавливается и используется позже, или я ошибаюсь?
Нет, в отличие от переменных класса перед их использованием необходимо инициализировать локальные переменные. В противном случае вы столкнетесь с ошибкой компилятора. – SomeJavaGuy
, но я использую статус только после инициализации в этом примере. Я использую только статус в System.out.println (status); и на этом этапе статус всегда имеет значение. – chiperortiz
@chiperortiz не обязательно - '&&' оценка коротких цепей, если LHS ложна. –