1. Списък на видовете обвивки
Знаете, че Java има 8 примитивни типа, които са типове, които не са класове. От една страна, това е добре - те са прости и заемат малко място. От друга страна, понякога часовете са точно това, от което се нуждаем. Ще разберете точно защо е така в следващия урок.
И така, Howво може да се направи?
Започвайки с петата version на Java, всеки примитивен тип получи клас близнак. Всеки такъв клас съхранява едно поле със стойност от определен тип. Тези класове се наричат типове обвивки , защото обвиват примитивни стойности в класове.
Ето списък на тези видове. познавате ли такива
| Примитивен тип | Клас обвивка |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Имената на примитивните типове започват с малка буква, но имената на класовете обвивки започват с главна буква. Някои от имената на класовете също са малко по-дълги: Integerinstead of intи Characterinstead of char.
Всички обекти на класовете обвивки са непроменими ( неизменни ).
Опростеният code за Integerкласа изглежда така:
| Код | Забележка |
|---|---|
|
Конструктор на променлива Методът връща стойност Статичният метод създава нов Integerобект за intпроменлива |
2. Преобразуване на an intв anInteger
Типовете обвивки се считат за двойници на техните примитивни братя и сестри: можете лесно да създадете обект обвивка, който съответства на примитивен тип.
Нека използваме типа int като пример, за да анализираме How примитивните типове взаимодействат със съответните им типове обвивки. Кодът за конвертиране от an intв an Integerи обратно ще изглежда така:
За да конвертирате intв Integer, трябва да напишете този code:
Integer name = new Integer(value);
Къде nameе името на Integerпроменлива и valueе обвитата intстойност.
Примери:
| Код | Забележка |
|---|---|
|
|
|
|
|
И за да конвертирате an Integerв an int, трябва да напишете този code:
int name = variable.intValue();
Къде nameе името на intпроменлива и variableе препратка към Integerобект.
Примери:
| Код | Забележка |
|---|---|
|
|
|
|
|
|
|
|
3. Автобоксиране и разопаковане
Но дори простите операции с Integerтипа не са лесни за писане.
Както казахме по-рано, Integerтипът е непроменим ( immutable ). За да създадете Integerобект с нова intстойност, трябва изрично да създадете нов Integerобект. Това каза, че е лесно да получите стойността на intсъхранена в Integerобект - просто извикайте intValue()метода.
Пример:
| Код | Описание |
|---|---|
|
Обвиване 5в Integerобект Вземете стойността от Integerобекта Създайте нов Integerобект (равно на 10) |
Това е доста тромав code, не мислите ли?
Създателите на Java са мислor така, затова са научor компилатора How да извършва тези операции автоматично. Автоматичното преобразуване на an intв an Integerсе нарича autoboxing (автоматично поставяне на стойността в кутия), а обратната операция (преобразуване на an Integerв an int) се нарича unboxing .
| Вашият code | Какво вижда компилаторът |
|---|---|
|
|
|
|
|
|
Благодарение на autoboxing и unboxing, можете безопасно да присвоите an intна Integerпроменлива и обратно. Можете да пишете изрази с всяHowва сложност, без да правите разлика между типовете intи Integer.
Примери:
| Код | Какво ще генерира компилаторът |
|---|---|
|
|
|
|
4. Сравняване на обвиващи променливи
Autoboxing и unboxing са прости и прозрачни процеси. Използваме new Integer()изрази, ако е необходимо, и извикваме intValue()метода, ако е необходимо.
Всичко работи добре и лесно за вас, програмиста. Имайте предвид, че ако сравнявате an Integerи an Integer, тогава сравнението се основава на референция, а не на стойности.
| Код | Конзолен изход |
|---|---|
|
|
|
|
Променливите aи bне съхраняват intстойности. Те съхраняват препратки към обекти. Това означава, че е важно да запомните How да ги сравнявате правилно:
| погрешно | вярно |
|---|---|
|
|
GO TO FULL VERSION