Tu jest prosta sztuczka.
Nie możesz tego wymyślić tylko za pomocą logiki boolowskiej. Korzystanie z tym, to połączenie ...
a
jest mniejsza lub równa b
i
b
jest mniejsza lub równa a
i
a
nie jest równa b
... nigdy nie wróci true
.
Jednak operator !=
porównuje odwołania, jeśli jego operandy są obiektami.
Więc dodaje powróci true
:
Integer a = 1;
Integer b = new Integer(1);
System.out.println(a<=b && b<=a && a!=b);
Co się dzieje tutaj jest: a
jako odwołania do obiektu nie jest równa b
jako odwołania do obiektu, choć oczywiście posiadają równe wartości całkowitych.
Jakie są typy "a" i "b"? – Tunaki
"a" i "b" mogą być dowolnymi opakowaniami liczbowymi, o ile są takie same. 'Byte',' Character' 'Integer',' Long', 'Float',' Double' jako '! =' Porównuje odniesienia, ale '<=' porównuje nieprzypisane wartości. –
Jeśli podoba ci się ta układanka, spróbuj 'x! = X + 0' ma trzy możliwe typy, a' x == -x' ma 22 możliwe wartości/typy. –