Они поддерживают ==
и !=
. Они просто не делают то, что вы ожидаете.
Для ссылок ==
и !=
сообщают вам, равны ли две ссылки, то есть относятся ли они к одному и тому же объекту.
class Thingy {}
Thingy a = new Thingy();
Thingy b = new Thingy();
System.out.println(a == b); // prints false, because a and b refer to different objects
Thingy c = b;
System.out.println(b == c); // prints true, because b and c refer to the same object
Это относится и к все ссылочных типов, в том числе в штучной упаковке примитивов:
Integer a = new Integer(50);
Integer b = new Integer(50);
System.out.println(a == b); // prints false, because a and b refer to different objects
Integer c = b;
System.out.println(b == c); // prints true, because b and c refer to the same object
Теперь ссылки не поддерживают <
или >
или <=
или >=
:
Thingy a = new Thingy();
Thingy b = new Thingy();
System.out.println(a < b); // compile error
однако , вложенные в бокс примитивы могут быть автоматически распакованы, а незапакованные примитивы порт их, так что компилятор использует автоматическая распаковку:
Integer a = new Integer(42);
Integer a = new Integer(43);
System.out.println(a < b);
// is automatically converted to
System.out.println(a.intValue() < b.intValue());
Это авто-распаковка не происходит с ==
или !=
, потому что эти операторы уже действуют без автоматической распаковки - они просто не делать то, что вы ожидать.
Вмещенные примитивы == обычные объекты, они уже не примитивы. – biziclop