Как можно утверждать, что "a <= b && b <= a && a!= B"?
Вот код, который я должен выяснить, как это возможно. У меня есть ключ, но я не знаю, как это сделать. Я думаю, что речь идет о отрицательных и положительных числах и, возможно, переменных модификаторах. Я новичок, я смотрел решение повсюду, но я не мог найти ничего полезного.
возникает вопрос: вам нужно объявить и инициализировать две переменные. Условие if должно быть истинным.
код:
if( a <= b && b <= a && a!=b){
System.out.println("anything...");
}
Я ценю, что вы нашли время.
Ответы
Ответ 1
Это невозможно с примитивными типами. Вы можете добиться этого с помощью целых целых чисел:
Integer a = new Integer(1);
Integer b = new Integer(1);
В сравнении <=
и >=
будет использоваться значение unboxed 1, а !=
будет сравнивать ссылки и будет успешным, так как они являются разными объектами.
Ответ 2
Это тоже работает:
Integer a = 128, b = 128;
Это не означает:
Integer a = 127, b = 127;
Авто-бокс a int
является синтаксическим сахаром для вызова Integer.valueOf(int)
. Эта функция использует кеш для значений меньше 128. Таким образом, назначение 128 не имеет кэш-атаки; он создает новый экземпляр Integer
при каждой операции автоматического бокса, а a != b
(сравнение ссылок) истинно.
Назначение 127 имеет кэш, а результирующие объекты Integer
- это тот же самый экземпляр из кеша. Итак, ссылочное сравнение a != b
неверно.
Ответ 3
Другим редким случаем для переменных класса может быть то, что другой поток может изменить значения a
и b
во время выполнения сравнения.