Оскільки ми вже знаємо, що можна змусити цей код оцінити справжній завдяки чудовим відповідям Ервіна Болвідта та phflack , я хотів показати, що вам потрібно підтримувати високий рівень уваги, коли маєте справу зі станом, схожим на представлений у питанні, як іноді те, що ви бачите, може бути не таким, яким ви вважаєте, що це таке.
Це моя спроба показати, що цей код друкується Success!на консолі. Я знаю, що трохи обдурив , але все ще думаю, що це гарне місце, щоб представити його тут.
Незалежно від того, якими є цілі написання коду - краще знати, як впоратися з наступною ситуацією та як перевірити, чи не помиляєтесь ви з тим, що ви думаєте, що бачите.
Я використав кирилицю "a", що є відмінним символом від латинського "a". Ви можете перевірити символи, використані в операторі if тут .
Це працює, тому що назви змінних взяті з різних алфавітів. Вони є різними ідентифікаторами, створюючи дві різні змінні з різним значенням у кожній.
Зауважте, що якщо ви хочете, щоб цей код працював належним чином, кодування символів потрібно змінити на один, що підтримує обидва символи, наприклад, всі кодування Unicode (UTF-8, UTF-16 (в BE або LE), UTF-32, навіть UTF-7 ) або Windows-1251, ISO 8859-5, KOI8-R (спасибі - Томасу Веллеру та Паєлу Еберману - за те, що вони це вказали ):
public class A {
public static void main(String[] args) {
int а = 0;
int a = 1;
if(а == 0 && a == 1) {
System.out.println("Success!");
}
}
}
(Я сподіваюся, що вам ніколи в майбутньому ніколи не доведеться мати справу з такою проблемою.)
&&є логічнимandоператором, це означає, щоaмає бути одночасно значення 1, 2 і 3, що логічно неможливо. Відповідь НІ, неможливо. Ви хочете написатиifзаяву, яка перевіряє, чиaмає одне зі значень 1, 2 АБО 3?