Como já sabemos que é possível fazer esse código ser avaliado como verdadeiro, graças às ótimas respostas de Erwin Bolwidt e phflack , eu queria mostrar que você precisa manter um alto nível de atenção ao lidar com uma condição semelhante à apresentada na pergunta, pois às vezes o que você vê pode não ser exatamente o que você pensa que é.
Esta é minha tentativa de mostrar que esse código é impresso Success!no console. Eu sei que trapacei um pouco , mas ainda acho que este é um bom lugar para apresentá-lo aqui.
Não importa quais sejam os objetivos de escrever um código como este - é melhor saber como lidar com a situação a seguir e como verificar se você não está errado com o que acha que vê.
Usei o cirílico 'a', que é um caractere distinto do latim 'a'. Você pode inspecionar os caracteres usados na instrução if aqui .
Isso funciona porque os nomes das variáveis são obtidos de diferentes alfabetos. Eles são identificadores distintos, criando duas variáveis distintas com um valor diferente em cada uma.
Observe que, se você deseja que esse código funcione corretamente, a codificação de caracteres precisa ser alterada para uma que suporte os dois caracteres, por exemplo, todas as codificações Unicode (UTF-8, UTF-16 (em BE ou LE), UTF-32 e até UTF-7 ) ou Windows-1251, ISO 8859-5, KOI8-R (obrigado - Thomas Weller e Paŭlo Ebermann - por apontarem):
public class A {
public static void main(String[] args) {
int а = 0;
int a = 1;
if(а == 0 && a == 1) {
System.out.println("Success!");
}
}
}
(Espero que você nunca precise lidar com esse tipo de problema em nenhum momento no futuro.)
&&é umandoperador lógico , o que significa queadeve ter os valores 1, 2 e 3 ao mesmo tempo, o que é logicamente impossível. A resposta é NÃO, não é possível. Deseja escrever umaifdeclaração que verifique seapossui um dos valores 1, 2 OU 3?