1. Integer
clase
Integer
también es bueno porque es una clase, lo que significa que puede tener campos y métodos. Y, por supuesto, los tiene. Muchos de ellos, docenas de ellos. Aquí consideraremos los más básicos.
La Integer
clase tiene dos campos que contienen los valores máximos y mínimos posibles del int
tipo:
Campo | Descripción |
---|---|
|
Valor máximo posible del int tipo |
|
Valor mínimo posible del int tipo |
A veces desea asignar el int
valor más pequeño o más grande posible a una variable. Para evitar saturar su código con constantes incomprensibles, puede escribir esto muy claramente de la siguiente manera:
Código | Descripción |
---|---|
|
|
La Integer
clase también tiene algunos métodos interesantes. Aquí están:
Métodos | Descripción |
---|---|
|
Devuelve una cadena que es la representación hexadecimal del número |
|
Devuelve una cadena que es la representación binaria del número. |
|
Devuelve una cadena que es la representación octal del número |
|
Envuelve el pasado int en un Integer objeto |
|
Devuelve el número obtenido de la cadena pasada |
Anteriormente se encontró con el Integer.parseInt()
método estático. Recordemos cómo funciona:
int name = Integer.parseInt(string);
Si se pasa una cadena que contiene un número (solo dígitos) al parseInt()
método, analizará la cadena y devolverá el número que contiene.
El resto de los métodos también son útiles. Por ejemplo, algunos de ellos pueden convertir un número pasado en una cadena que contiene la representación binaria, octal o hexadecimal del número.
2. Double
clase
En general, la Double
clase es similar a la Integer
clase, solo que envuelve un double
en lugar de un int
. También tiene campos y métodos que nos serán de interés. Considere algunos de ellos:
La Double
clase tiene seis campos interesantes:
Campo | Descripción |
---|---|
|
infinito negativo |
|
infinito positivo |
|
Mínimo exponente posible (2 x ) |
|
Máximo exponente posible (2 x ) |
|
Valor mínimo posible del double tipo |
|
Valor máximo posible del double tipo |
Infinidad
Si divides -1.0
por 0.0
, obtienes infinito negativo. Si divides 1.0
por 0.0
, obtienes infinito positivo. No solo puede dividir a double
por cero, sino que también puede usarlo para almacenar el resultado de estas operaciones.
exponente de undouble
Comprender el exponente es fácil. Internamente, un doble consta de una mantisa y un exponente. Pero aquí el valor del exponente no es , sino . Por lo tanto, si el exponente aumenta en , el valor total del número se duplicará.10x
2x
1
MIN_EXPONENT == -1024
, lo que significa , que es aproximadamente igual a2-1024
10-308
Y por supuesto, la Double
clase tiene métodos interesantes:
Métodos | Descripción |
---|---|
|
Devuelve una cadena que es la representación hexadecimal del número |
|
Comprueba si el número pasado es infinito. |
|
Comprueba si el número pasado esNaN |
|
Envuelve el pasado double en un Double objeto |
|
Devuelve el número obtenido de la cadena pasada |
Curiosamente, hay un isInfinite()
método que devuelve true
si el número pasado es infinito positivo o negativo.
El isNaN()
método es similar: verifica si el número pasado es NaN
( Not-a-Number , una constante especial que indica un valor indefinido).
3. Character
clase
La Character
clase es interesante principalmente por su gran cantidad de métodos de utilidad estáticos que le permiten verificar si los caracteres pertenecen a varias categorías.
Ejemplos
Métodos | Descripción |
---|---|
|
Comprueba si un carácter es un carácter alfabético |
|
Comprueba si el carácter es una letra. |
|
Comprueba si el carácter es un dígito |
|
Comprueba si el carácter es un espacio, un salto de línea o un salto de página (códigos: 12, 13, 14) |
|
Comprueba si el carácter es un espacio en blanco: un espacio, una pestaña, etc. |
|
Comprueba si el carácter está en minúsculas |
|
Comprueba si el carácter está en mayúsculas |
|
Convierte el caracter a minúsculas |
|
Convierte el carácter a mayúsculas |
Una característica de estos métodos es que funcionan con todos los alfabetos conocidos: los números arábigos se clasifican como dígitos, etc.
4. Boolean
clase
El Boolean
tipo es prácticamente el mismo que el boolean
tipo. Las diferencias son mínimas.
A continuación mostramos una versión simplificada de la Boolean
clase:
Código | Descripción |
---|---|
|
Constantes: TRUE è Constructor de clase de FALSE variable El método devuelve el valor de la variable interna Este método estático convierte a ya . Boolean true TRUE false FALSE |
El Boolean
tipo tiene dos constantes (dos campos):
constantes de la clase | Contraparte para el tipo booleano | Descripción |
---|---|---|
|
|
verdadero |
|
|
FALSO |
Puede trabajar con ellos de la misma manera que trabaja con el boolean
tipo:
Código | Nota |
---|---|
|
La Boolean clase es la única clase que se puede escribir dentro de una condición. |
|
Las tres variables son iguales a true /TRUE |
|
Las constantes se pueden comparar usando ambos equals y == Esto también funcionará. |
El autoboxing funciona muy bien aquí. Eso significa que puede usar este tipo de la misma manera que el boolean
tipo: no hay trampas a las que prestar atención.
como se escribe | Cómo funciona |
---|---|
|
|
Y aquí una comparación de los tipos boolean
y Boolean
:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Si realmente necesita un Boolean
objeto independiente, debe crearlo explícitamente:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Un ejemplo más, donde usaremos un Boolean
interior de un if
:
Código | Nota |
---|---|
|
Esto compilará y funcionará. |
¡Esto se compilará, pero no funcionará!
Código | Nota |
---|---|
|
error _ Esta línea arrojará una excepción. |
5. Almacenamiento en caché de valores durante el autoboxing
Hay algunas trampas relacionadas con los tipos de envoltura de enteros.
Como ya sabes, si comparamos an int
y an Integer
, el Integer
se convierte en un int
:
como se escribe | Cómo funciona |
---|---|
|
|
Si compara dos Integer
objetos entre sí, no se convierten en int
s:
Código | Salida de consola |
---|---|
|
|
a == c
y , pero , porque cuando comparamos y estamos comparando referencias. Que es esencialmente lo que esperaríamos.b == c
a != b
a
b
Sorpresa
Pero si reemplazamos 500
con 100
, obtenemos un resultado completamente diferente:
Código | Salida de consola |
---|---|
|
|
El problema aquí es que un nuevo Integer
objeto no siempre se crea realmente durante el autoboxeo . Los objetos se almacenan en caché para valores -128
hasta 127
inclusive.
La Integer
clase tiene una matriz oculta que almacena objetos: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Si escribe Integer x = 128
, el proceso de autoboxing crea un nuevo objeto, pero si escribe Integer x = 127
, el proceso de autoboxing recupera el objeto existente de la memoria caché (de la matriz).
Si no desea que el Integer
objeto provenga del caché, deberá crearlo explícitamente escribiendo:Integer x = new Integer(127);
Todos los tipos de contenedor tienen un caché de este tipo: Integer
, Long
, Byte
, Short
, Boolean
. Para el Boolean
tipo, sus valores TRUE
y FALSE
son constantes, por lo que también se almacenan esencialmente en caché.