o operador || é um pouco + “inteligente” que o operador “|”
o primeiro só segue a adiante no código se for necessario, o segundo executa o código todo sempre…
por exemplo
public boolean teste(MeuObjeto m) {
MeuObjeto m2 = new MeuObjeto(0);
if (m == null || m.equals(m2))
return false;
else
...
}
esete código primeiro testa se é nulo, se for nulo, ele nem verifica se m.equals(m2) pois a primeira condição do “||” OU já foi atendida…
public boolean teste(MeuObjeto m) {
MeuObjeto m2 = new MeuObjeto(0);
if (m == null | m.equals(m2))
return false;
else
...
}
esse segundo código, testa os 2 lados do OU sempre… portanto se o objeto enviado for NULO, vai dar true para a primeira parte, porem ele vai tentar fazer m.equals(m2) o que vai gerar 1 erro no seu código, visto que sendo “m” null, não se pode fazer m.equals(…) pois isso gera um NullPointerException…
…
todo operador duplicado || && … etc … tem essa peculiaridade… ele so prossegue os testes se for realmente necessario…
…
EDIT.: não vi direito, vc quer fazer outro tipo de teste, pelo que entendi, vc quer saber c ladoA ou ladoB ou ladoC == 0 … se o que vc espera é isso, esse seu teste não faz isso… (ladoA | ladoB | ladoC) produz um número, que eu na verdade não sei bem com funciona…