В приведенном ниже классе я попытался сравнить класс-оболочку с примитивом, но результаты отличаются.
Я проверил следующие ссылки ссылки:
Более интересный вопрос - почему
new Object();
нужно каждый раз создавать уникальный экземпляр? то есть почемуnew Object();
не разрешено кэшировать? Ответ -wait(...)
иnotify(...)
звонки. Кэширование новогоObject()
неправильно приведет к тому, что потоки будут синхронизироваться друг с другом, когда это не нужно.
Если есть новый объект, тогда как a
и c
равны?
Если b
равно c
и c
равно a
, то a
должно быть равно b
. Но в следующем случае я получил a != c
Пожалуйста, объясни.
class WrapperCompare {
public static void main (String args[]) {
Integer a = new Integer(10);
Integer b = 10;
int c=10;
System.out.println(b==c); //true
System.out.println(a==b); //false
System.out.println(a==c); //true
}
}
Обновление: по этой ссылке происходит целочисленное кеширование.
По сути, класс Integer хранит кэш экземпляров Integer в диапазоне от -128 до 127, и все автобокс, литералы и использования Integer.valueOf() будут возвращать экземпляры из этого кэша для диапазона, который он охватывает.
Так что в этом случае все утверждения должны быть правдой.