#c_sharp #java
Пожалуйста, ребята, объясните что такое обертка класса, например, в Java! Вот, например, есть значимый тип данных "int" - который 4 байта и может хранить целочисленное число. Я думал что тип "int" это просто самостоятельный тип и когда мы объявляем "интовую переменную" то компилятор просто видит ключевое слово int и понимает что необходимо выделить 4 байта памяти в стеке и положить туда значение. Но у него есть класс обертка Integer - это как? Класс который описывает как должна работать "интовая переменная"? То есть компилятор всегда обращается к этому классу если я объявляю "интовую переменную"?
Ответы
Ответ 1
То есть компилятор всегда обращается к этому классу если я объявляю "интовую переменную" Нет, интовая переменная это просто интовая переменная. Классы Integer, Long, Double и им подобные обертки для примитивных типов нужны, главным образом, для использования в коллекциях, т.к. коллекции в Java могут работать только со ссылочными типами данных (наследниками класса Object). Т.е. вы не можете объявить, например, список List, поэтому объявляете его с использованием обертки: List . Кроме того, эти классы-обертки содержат ряд вспомогательных методов для работы с соответствующими примитивными типами. Обновление Да, и обратите внимание на разницу между строками: Integer a = 5; Integer b = 5; Integer c = new Integer(5); В первых двух случаях значение упаковывается (boxing) в обертку неявно. В результате Java инициализирует переменные a и b не через new, а через Integer.valueOf(). В результате значения кешируются (только для определенного часто используемого диапазона чисел), что сэкономит нам память: System.out.println(a == b); // 'true' При ручной упаковке вы гарантированно создаете новый экземпляр: System.out.println(a == с); // 'false'
Комментариев нет:
Отправить комментарий