Мне интересно, можно ли решить этот вопрос на Java (я новичок в этом языке). Это код:
class Condition {
// you can change in the main
public static void main(String[] args) {
int x = 0;
if (x == x) {
System.out.println("Ok");
} else {
System.out.println("Not ok");
}
}
}
В своей лаборатории я получил следующий вопрос: как можно пропустить первый случай (т.е. сделать x == x
условие ложным), не изменяя само условие?
java
if-statement
Хусам
источник
источник
System.out.println("Gotcha!");
вместо комментария? :).cross()
а другой есть,.dot()
и нет никакой путаницы. Также тот факт, что «переопределить оператор == и всегда возвращать false» не может произойти, кажется про javaОтветы:
Один простой способ - использовать
Float.NaN
:Вы можете сделать то же самое с
Double.NaN
.Из JLS §15.21.1. Операторы числового равенства
==
и!=
:источник
источник
else
. Технически это не нарушает условия вопроса.По спецификациям языка Java
NaN
не равноNaN
.Следовательно, любая строка, которая вызывает
x
равенствоNaN
, вызовет это, напримерИз спецификации языка Java:
источник
Не уверен, что это вариант, но переход
x
от локальной переменной к полю позволит другому потоку изменять свое значение между чтением левой и правой стороны вif
операторе.Вот короткая демонстрация:
Вывод:
источник
Замененная строка могла читать.
Это приведет к печати ошибки.
Спецификация языка Java (JLS) гласит:
источник
Мне удалось получить
Gotcha!
от этого:источник
a != a
из-за того, что он был изменен другим потоком. Я подозреваю, что это принесет очки в интервью.a
это было изменено первым потоком между первым и вторым доступом для сравненияif
утверждением, при необходимости можно было бы записать одной ужасной строкойЕсть так много решений:
источник
super.println
не упускаю , это должно быть «Не в порядке», верно?Одно простое решение:
Но я не знаю всех правил этой загадки ...
:) Знаю, что это чит, но не зная всех правил, это самое простое решение вопроса :)
источник
if (System.out.println("Gotcha") && false)
Создайте свой собственный класс
System
в одном пакете сCondition
.В этом случае ваш
System
класс будет скрыватьjava.lang.System
классIdeone DEMO
источник
Используя тот же подход с пропуском / изменением вывода из других ответов:
источник