1. Integerclase
Integertambié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 Integerclase tiene dos campos que contienen los valores máximos y mínimos posibles del inttipo:
| Campo | Descripción |
|---|---|
|
Valor máximo posible del inttipo |
|
Valor mínimo posible del inttipo |
A veces desea asignar el intvalor 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 Integerclase 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 inten un Integerobjeto |
|
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. Doubleclase
En general, la Doubleclase es similar a la Integerclase, solo que envuelve un doubleen lugar de un int. También tiene campos y métodos que nos serán de interés. Considere algunos de ellos:
La Doubleclase 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 doubletipo |
|
Valor máximo posible del doubletipo |
Infinidad
Si divides -1.0por 0.0, obtienes infinito negativo. Si divides 1.0por 0.0, obtienes infinito positivo. No solo puede dividir a doublepor 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á.10x2x1
MIN_EXPONENT == -1024, lo que significa , que es aproximadamente igual a2-102410-308
Y por supuesto, la Doubleclase 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 doubleen un Doubleobjeto |
|
Devuelve el número obtenido de la cadena pasada |
Curiosamente, hay un isInfinite()método que devuelve truesi 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. Characterclase
La Characterclase 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. Booleanclase
El Booleantipo es prácticamente el mismo que el booleantipo. Las diferencias son mínimas.
A continuación mostramos una versión simplificada de la Booleanclase:
| 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 . BooleantrueTRUEfalseFALSE |
El Booleantipo 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 booleantipo:
| Código | Nota |
|---|---|
|
La Booleanclase 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 equalsy == Esto también funcionará. |
El autoboxing funciona muy bien aquí. Eso significa que puede usar este tipo de la misma manera que el booleantipo: no hay trampas a las que prestar atención.
| como se escribe | Cómo funciona |
|---|---|
|
|
Y aquí una comparación de los tipos booleany 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 Booleanobjeto 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 Booleaninterior 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 inty an Integer, el Integerse convierte en un int:
| como se escribe | Cómo funciona |
|---|---|
|
|
Si compara dos Integerobjetos entre sí, no se convierten en ints:
| Código | Salida de consola |
|---|---|
|
|
a == cy , pero , porque cuando comparamos y estamos comparando referencias. Que es esencialmente lo que esperaríamos.b == ca != bab
Sorpresa
Pero si reemplazamos 500con 100, obtenemos un resultado completamente diferente:
| Código | Salida de consola |
|---|---|
|
|
El problema aquí es que un nuevo Integerobjeto no siempre se crea realmente durante el autoboxeo . Los objetos se almacenan en caché para valores -128hasta 127inclusive.
La Integerclase 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 Integerobjeto 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 Booleantipo, sus valores TRUEy FALSEson constantes, por lo que también se almacenan esencialmente en caché.
GO TO FULL VERSION