JavaRush /Blog Java /Random-ES /Guía de clases de enteros de Java

Guía de clases de enteros de Java

Publicado en el grupo Random-ES
En este artículo hablaremos de la clase Integer. Consideremos estas preguntas:
  • ¿Qué son las clases contenedoras?
  • empaquetado/desempaquetado automático de primitivas;
  • funcionamiento de la clase Integer, sus métodos y constantes.
Tutorial de clases enteras de Java - 1

Clases contenedoras de tipos primitivos.

Como sabes, Java tiene varios tipos de datos, que se pueden dividir en dos bloques:
  • primitivo;
  • referencia.
Hay varios tipos de datos primitivos en Java:
  • números enteros: byte, corto, int, largo;
  • números de coma flotante (reales) - flotantes, dobles;
  • tipo de datos lógicos: booleano;
  • tipo de datos de carácter: char.
Cada tipo de datos primitivo tiene su propia clase contenedora. Un tipo de datos de referencia que envuelve a su hermano pequeño primitivo en un objeto Java. A continuación se muestran los tipos de datos primitivos y sus correspondientes clases contenedoras:
tipo primitivo clase contenedora
byte Byte
corto Corto
En t Entero
largo Largo
flotar Flotar
doble Doble
booleano Booleano
carbonizarse Personaje
En un sentido práctico, las primitivas y sus clases contenedoras tienen mucho en común. La mayoría de las operaciones se realizan de manera idéntica. Sin embargo, las clases contenedoras tienen una serie de características que no son características de las primitivas. Primero, están las clases: cuando trabajamos con clases contenedoras, trabajamos con objetos. En segundo lugar (todo lo que sigue se deriva del punto uno), estos objetos pueden ser nulos. En tercer lugar, las clases contenedoras proporcionan una serie de constantes y métodos que facilitan el trabajo con un tipo de datos en particular. En este artículo veremos más de cerca cómo trabajar con la clase Integer.

El número entero

La clase Integer es una clase contenedora del tipo primitivo int. Esta clase contiene un único campo de tipo int. Como clase contenedora, Integer proporciona varios métodos para trabajar con ints, así como varios métodos para convertir int en String y String en int. A continuación veremos varios ejemplos de cómo trabajar con la clase. Empecemos por la creación. La más utilizada (y la más fácil de usar) es la siguiente opción de creación:
Integer a = 3;
Es decir, la inicialización de una variable Integer en este caso es similar a la inicialización de una variable int. Además, una variable Integer se puede inicializar con el valor de una variable int:
int i = 5;
Integer x = i;
System.out.println(x); // 5
En el caso anterior, el empaquetado automático se produce implícitamente. Hablaremos más sobre esto a continuación. Además de las opciones de inicialización enumeradas anteriormente, se puede crear una variable entera como otros objetos, usando un constructor y la nueva palabra clave:
Integer x = new Integer(25);
System.out.println(x);
Sin embargo, lleva más tiempo escribir y leer, por lo que esta opción es la menos común. Puedes hacer todo con variables enteras que puedes hacer con variables int. Ellos pueden ser:
Doblar

Integer a = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
Sustraer

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
Multiplicar

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
Dividir

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
Incremento

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
Decremento

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
Sin embargo, con todo esto hay que tener cuidado y recordar que Integer es un tipo de datos de referencia y una variable de este tipo puede ser nula. En este caso (si la variable es nula), es mejor abstenerse de realizar operaciones aritméticas (y cualquier otra en la que nulo no augure nada bueno). He aquí un ejemplo:
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
La mayoría de las operaciones de comparación se realizan de la misma forma que en el tipo primitivo int:
Integer a = 1;
Integer b = 2;

System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Producción:

false
false
true
true
Destaca la operación de comparar dos variables Enteras. Y el punto aquí es que Integer es un tipo de datos de referencia y sus variables almacenan referencias a valores, y no los valores en sí (objetos). Se pueden observar manifestaciones de este hecho al ejecutar el siguiente fragmento de código:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);

System.out.println(a == b); // true
System.out.println(a == c); // false
El resultado de la primera igualdad será verdadero y el de la segunda será falso. Esto sucede porque en el primer caso comparamos dos variables (“a” y “b”) que almacenan referencias al mismo objeto. Y en el segundo caso, comparamos dos variables que hacen referencia a dos objetos diferentes (cuando creamos la variable “c” creamos un nuevo objeto). Pongamos otro ejemplo interesante:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a == b); // true
System.out.println(x == y); // false
Como podemos ver, el resultado de la primera comparación es verdadero y el resultado de la segunda es falso. Se trata de almacenamiento en caché. Todos los números enteros en el rango de -128 a 127 inclusive (estos valores se pueden personalizar) se almacenan en caché. Entonces, cuando creamos una nueva variable y le asignamos un valor entero entre -128 y 127, no estamos creando un nuevo objeto, sino que le asignamos a la variable una referencia a un objeto ya creado en el caché. Ahora bien, sabiendo este hecho, el ejemplo anterior no parece tan místico. Las variables a y b se refieren al mismo objeto: un objeto del caché. Y durante la inicialización de las variables xey, creamos un nuevo objeto cada vez, y estas variables almacenan referencias a diferentes objetos. Y como sabes, el operador == compara los valores de las variables y los valores de las variables de referencia son referencias. Para verificar con precisión la igualdad entre dos variables enteras, debe usar (no importa cuán trivial pueda parecer) el método igual. Reescribamos el ejemplo anterior:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true

Empaquetado y desempaquetado automático de enteros

¿Qué es el embalaje y desembalaje automático? Al crear nuevas variables enteras, utilizamos la siguiente construcción:
Integer a = 2020;
De esta manera creamos un nuevo objeto sin usar el nuevo operador clave. Esto es posible gracias al mecanismo de autoempaquetado del tipo primitivo int. El procedimiento inverso ocurre al asignar una variable int primitiva al valor de una variable de referencia Integer:
Integer a = 2020;
int x = a;
En este caso, parece que hemos asignado una referencia (es decir, la referencia a un objeto es el valor de la variable "a") a una variable primitiva. Pero, de hecho, gracias al mecanismo de desempaquetado automático, se escribió en la variable "x" el valor 2020. El empaquetado/desempaquetado automático es un fenómeno muy común en Java. A menudo ocurre por sí solo, a veces incluso sin el conocimiento del programador. Pero aún necesitas saber sobre este fenómeno. Tenemos un artículo interesante sobre este tema en Javarush .

Constantes de clase entera

La clase Integer proporciona varias constantes y métodos para trabajar con números enteros. En esta sección veremos más de cerca algunos de ellos en la práctica. Empecemos por las constantes. La siguiente tabla muestra todas las constantes de clase:
Costanta Descripción
TAMAÑO El número de bits en el sistema numérico de dos dígitos ocupados por el tipo int
BYTES El número de bytes en el sistema numérico de dos dígitos ocupados por el tipo int
VALOR MÁXIMO El valor máximo que puede contener un tipo int
MIN_VALUE El valor mínimo que puede contener un tipo int
TIPO Devuelve un objeto de tipo Clase de tipo int
Veamos los valores de todas estas constantes ejecutando el siguiente código:
public static void main(String[] args) {
        System.out.println(Integer.SIZE);
        System.out.println(Integer.BYTES);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.TYPE);
}
Como resultado, obtenemos el siguiente resultado:

32
4
2147483647
-2147483648
int

Métodos de la clase Integer

Ahora echemos un vistazo rápido a los métodos más utilizados de la clase Integer. Entonces, los "superiores" están encabezados por métodos para convertir un número a partir de una cadena o convertir una cadena a partir de un número. Comencemos por convertir una cadena en un número. Para estos fines se utiliza el método parseInt , la firma se encuentra a continuación:
  • 
    static int parseInt(String s)
Este método convierte String a int. Demostremos cómo funciona este método:
int i = Integer.parseInt("10");
System.out.println(i); // 10
Si la conversión no es posible (por ejemplo, pasamos una palabra al método parseInt), se generará una excepción NumberFormatException. El método parseInt(String s) tiene un hermano sobrecargado:
  • 
    static int parseInt(String s, int radix)
Este método convierte el parámetro s a int. El parámetro radix indica en qué sistema numérico se escribió originalmente el número en s, que debe convertirse a int. Ejemplos a continuación:
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8));   // 8
System.out.println(Integer.parseInt("F", 16));   // 15
Los métodos parseInt devuelven un tipo de datos primitivo int. Estos métodos tienen un análogo: el método valueOf . Algunas variaciones de este método simplemente llaman a parseInt internamente. La diferencia con parseInt es que el resultado de valueOf será un número entero, no un int. Veamos todas las opciones de este método y un ejemplo de cómo funciona a continuación:
  • valor entero estático de (int i): devuelve un número entero cuyo valor es i;
  • static Integer valueOf(String s): similar a parseInt(String s), pero el resultado será Integer;
  • static Integer valueOf(String s, int radix): similar a parseInt(String s, int radix), pero el resultado será Integer.
Ejemplos:
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);

System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Analizamos métodos que le permiten convertir String a int/Integer. El procedimiento inverso se logra utilizando los métodos toString . Puedes llamar al método toString en cualquier objeto Integer y obtener su representación de cadena:
Integer x = 5;
System.out.println(x.toString()); // 5
Sin embargo, debido al hecho de que el método toString a menudo se llama implícitamente en objetos (por ejemplo, cuando se envía un objeto a la consola para imprimir), los desarrolladores rara vez utilizan este método explícitamente. También existe un método estático toString, que toma un parámetro int y lo convierte en una representación de cadena. Por ejemplo:
System.out.println(Integer.toString(5)); // 5
Sin embargo, al igual que el método toString no estático, usar un método estático explícitamente es poco común. Más interesante es el método estático toString, que toma 2 parámetros enteros:
  • static String toString(int i, int radix): convertirá i en una representación de cadena en el sistema numérico de base.
Ejemplo:
System.out.println(Integer.toString(5, 2)); // 101
La clase Integer tiene un par de métodos para encontrar el máximo/mínimo de dos números:
  • static int max(int ​​​​a, int b) devolverá el valor más grande entre las variables pasadas;
  • static int min(int a, int b) devolverá el valor más pequeño entre las variables pasadas.
Ejemplos:
int x = 4;
int y = 40;

System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4

Conclusión

En este artículo analizamos la clase Integer. Hablamos sobre qué tipo de clase es esta y qué clases contenedoras son. Miramos la clase desde un punto de vista práctico. Analizamos ejemplos de operaciones aritméticas, incluidas operaciones de comparación. Analizamos las complejidades de comparar dos variables enteras y examinamos el concepto de objetos almacenados en caché. También mencionamos el fenómeno del empaquetado/desempaquetado automático de tipos de datos primitivos. Además, logramos observar algunos métodos de la clase Integer, así como algunas constantes. Dieron ejemplos de cómo convertir números de un sistema numérico a otro.

Tarea

  1. Estudie qué otros métodos de la clase Integer existen (puede estudiarlos en el sitio web con la documentación oficial ), escriba en los comentarios cuál de los métodos que ha estudiado (excluyendo los que se dan en el artículo) es más útil en su opinión ( será utilizado por usted con mayor frecuencia). Y también proporcione razones para su opinión.

    PD: Aquí no hay respuestas correctas, pero esta actividad te permitirá estudiar mejor la clase.

  2. Resuelve un pequeño problema sencillo para consolidar el material.

    Tenemos dos números:

    1100001001 - en el sistema numérico binario
    33332 - en el sistema numérico quinario

    Es necesario, utilizando únicamente métodos de la clase Integer, determinar el máximo entre dos números dados y luego mostrar la diferencia entre el valor máximo y mínimo en el sistema numérico ternario.

  3. Convierta el valor entero máximo posible al sistema numérico octal y muestre el número de dígitos en el número resultante (cuente el número mediante programación).

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION