Porém estou utilizando o java 6 e não deveria necessitar o uso de Boolean.FALSE e Boolean.TRUE.
Seria isso bug do Java ?
Obs: Operador ternario é uma forma compacta de expressar o if e else, ou seja, o mesmo que if in-line.. ou não ?
ViniGodoy
É que a palavra inline não é sinônimo para "curto". De qualquer forma, esse operador não é exatamente igual a um if, pq ele exige o retorno de um valor. Você não pode simplesmente fazer:
voidx(){}voidy(){}inta=10;a<10?x():y();
Que dá erro.
Matheus_Leandro_Ferr
Claro.
Mas então, o que seria um if inline para você ?
ViniGodoy
Inline é um código que depois de compilado irá desaparecer. Para mim, um if inline seria analisado em tempo de compilação e só o resultado seria colocado no binário final.
Mas enfim, acho que estamos fugindo do ponto aqui. Ainda estou curioso para saber de onde vem esse NullPointerException. O que acontece é que com Boolean.TRUE e Boolean.FALSE o Java não fará auto-boxing, e por isso, o erro não ocorre.
Ainda assim, eu esperaria que o compilador fosse mais esperto que isso, ou será que meu chute está errado?
Matheus_Leandro_Ferr
Poisé,
também achava que o compilador seria esperto o suficiente para identificar essa situação.
Pensem mais um pouco. Dá a impressão que é algum lado obscuro das regras de “autoboxing” que interferem com a resolução de tipos no “?”. Pode até ser algum bug esquisito do compilador.
Obs: Quando você usa == para comparar, ele acaba comparando a referencia do objeto e utilizando o método equals() ele compara o valor.
Obs2: Fui atras disso... isso seria um foro na implementação do Flyweight Pattern ???
mario.fts
eu li algo a respeito disso, acho que tem a ver com o fato de 129 não caber em um byte… (caia até na certificação acho) vou dar uma procurada e depois posto aqui
Marky.Vasconcelos
Lembro de ver isso em tópicos bem antigos do GUJ. Mas lembro que após 128 o Integer já aloca um novo espaço. Não lembro direito. Tem que procurar mesmo.