Wrapper Classes · Clases Wrapper
| English | Español |
|---|---|
| wrapper class/ˈræpə klæs/ | clase envoltoria |
| autoboxing/ˌɔːtəʊˈbɒksɪŋ/ | autoboxing |
| unboxing/ʌnˈbɒksɪŋ/ | unboxing |
Boxing a primitive
- Some Java structures (like
ArrayList) hold objects, not primitives. - A wrapper class 包装类 wraps a primitive in an object:
Integerwrapsint,Doublewrapsdouble. Integer boxed = Integer.valueOf(5);puts theint5inside an object.- Wrappers let primitives live where only objects are allowed.
Envolviendo un primitivo
- Algunas estructuras de Java (como
ArrayList) almacenan objetos, no primitivos. - Una clase envolvente 包装类 envuelve un primitivo dentro de un objeto:
Integerenvuelveint,Doubleenvuelvedouble. Integer boxed = Integer.valueOf(5);coloca elint5dentro de un objeto.- Los envelopes permiten que los primitivos vivan donde solo se permiten objetos.
Autoboxing and unboxing
- Java converts automatically — autoboxing 自动装箱 and unboxing 自动拆箱.
Integer x = 5;autoboxes5;int y = x;unboxes it back.- So
list.add(5)works even though the list holdsIntegerobjects. - You rarely write
Integer.valueOfby hand — autoboxing does it.
Autoboxing y unboxing
- Java convierte automáticamente — autoboxing 自动装箱 y unboxing 自动拆箱.
Integer x = 5;autoboxea5;int y = x;lo desenvuelve nuevamente.- Por eso
list.add(5)funciona aunque la lista contenga objetosInteger. - Rara vez escribes
Integer.valueOfa mano — el autoboxing lo hace por ti.
Why ArrayList needs them
ArrayList<Integer>holdsIntegerobjects, because generics require a reference type.- You can't write
ArrayList<int>— primitives aren't objects. - Autoboxing lets you add and read plain
ints conveniently. Double,Boolean, etc. play the same role for their primitives.
Por qué ArrayList los necesita
ArrayList<Integer>contiene objetosInteger, porque los genéricos requieren un tipo de referencia.- No puedes escribir
ArrayList<int>— los primitivos no son objetos. - El autoboxing permite agregar y leer
ints simples de forma conveniente. Double,Boolean, etc., cumplen el mismo papel para sus primitivos correspondientes.
Compare wrappers with equals
- Two
Integerobjects should be compared with.equals(), not==. ==compares references;.equals()compares the wrapped values.- (Java caches small Integers, so
==sometimes seems to work — don't rely on it.) - The same "use
.equals()for objects" rule fromStringapplies here.
Comparar envelopes con equals
- Dos objetos
Integerdeben compararse con.equals(), no con==. ==compara referencias;.equals()compara los valores envueltos.- (Java guarda en caché pequeños Integers, por lo que
==a veces parece funcionar — no confíes en ello). - La misma regla de "usar
.equals()para objetos" aplicada enStringaplica aquí también.
Wrappers are objects, so compare their values with .equals(), not ==. == tests reference identity; for two Integer objects with the same value it can be false. And you can't parameterize a collection with a primitive — it's ArrayList<Integer>, never ArrayList<int>. Autoboxing bridges the gap so you can still add plain ints.
Los envelopes son objetos, así que compara sus valores con .equals(), no con ==. == prueba la identidad de la referencia; para dos objetos Integer con el mismo valor puede ser false. Además, no puedes parametrizar una colección con un primitivo — es ArrayList<Integer>, nunca ArrayList<int>. El autoboxing puentea esta brecha para que aún puedas agregar ints simples.
Wrappers with an ArrayList:
ArrayList<Integer> nums = new ArrayList<Integer>();nums.add(5);— theint5is autoboxed into anInteger.int first = nums.get(0);— theIntegeris unboxed back toint.
Envelopes con un ArrayList:
ArrayList<Integer> nums = new ArrayList<Integer>();nums.add(5);— elint5es autoboxeado a unInteger.int first = nums.get(0);— elIntegeres desenvuelto nuevamente aint.
A wrapper class (Integer, Double, Boolean) wraps a primitive in an object so it can go where objects are required — like an ArrayList<Integer> (you can't write ArrayList<int>). Autoboxing and unboxing convert automatically. Compare wrapper objects with .equals(), not ==.
Una clase envolvente (Integer, Double, Boolean) envuelve un primitivo dentro de un objeto para que pueda ir donde se requieren objetos — como un ArrayList<Integer> (no puedes escribir ArrayList<int>). El autoboxing y unboxing convierten automáticamente. Compara objetos envelopes con .equals(), no con ==.
Autoboxing and unboxing · Autocajado y descajado
int ↔ Integer conversions happen automatically. · Las conversiones entre int ↔ Integer ocurren automáticamente.
Which wrapper class wraps an int? · ¿Qué clase wrapper encapsula un int?
Integer wraps int; Double wraps double. · Integer encapsula int; Double encapsula double.
Why must an ArrayList of ints be declared ArrayList
You can't write ArrayList
Two Integer objects should be compared with... · Dos objetos Integer deben compararse con...
Wrappers are objects — use .equals() for their values. · Los wrappers son objetos: use .equals() para sus valores.
In nums.add(5), the int 5 is automatically boxed into an Integer (autoboxing). · En nums.add(5), el int 5 se autocaja automáticamente en un Integer (autocajado).
Autoboxing converts the primitive to a wrapper object. · El autocajado convierte el primitivo en un objeto wrapper.
A class that wraps a primitive in an object is a ___ class (one word). · Una clase que encapsula un primitivo en un objeto es una clase ___ (una palabra).
Integer, Double, Boolean are wrapper classes. · Integer, Double, Boolean son clases wrapper.