JavaRush /Java Blog /Random-IT /Guida alla classe intera Java

Guida alla classe intera Java

Pubblicato nel gruppo Random-IT
In questo articolo parleremo della classe Integer. Consideriamo queste domande:
  • cosa sono le classi wrapper;
  • autopacking/unpacking delle primitive;
  • funzionamento della classe Integer, suoi metodi e costanti.
Esercitazione sulla classe intera Java - 1

Classi wrapper di tipi primitivi

Come sai, Java ha vari tipi di dati, che possono essere divisi in due blocchi:
  • primitivo;
  • riferimento.
Esistono diversi tipi di dati primitivi in ​​Java:
  • numeri interi: byte, short, int, long;
  • numeri in virgola mobile (reali) - float, double;
  • tipo di dati logico: booleano;
  • tipo di dati carattere - car.
Ogni tipo di dati primitivo ha la propria classe wrapper. Un tipo di dati di riferimento che racchiude il suo fratellino primitivo in un oggetto Java. Di seguito sono riportati i tipi di dati primitivi e le classi wrapper corrispondenti:
Tipo primitivo Classe involucro
byte Byte
corto Corto
int Numero intero
lungo Lungo
galleggiante Galleggiante
Doppio Doppio
booleano Booleano
car Carattere
In senso pratico, le primitive e le loro classi wrapper hanno molto in comune. La maggior parte delle operazioni vengono eseguite in modo identico. Tuttavia, le classi wrapper hanno una serie di caratteristiche che non sono tipiche delle primitive. Innanzitutto ci sono le classi: quando lavoriamo con le classi wrapper, lavoriamo con gli oggetti. In secondo luogo (tutto ciò che segue segue dal punto uno), questi oggetti possono essere nulli. In terzo luogo, le classi wrapper forniscono una serie di costanti e metodi che semplificano il lavoro con un particolare tipo di dati. In questo articolo daremo uno sguardo più da vicino al lavoro con la classe Integer.

L' intero

La classe Integer è una classe wrapper di tipo primitivo int. Questa classe contiene un singolo campo di tipo int. Come classe wrapper, Integer fornisce vari metodi per lavorare con gli int, oltre a una serie di metodi per convertire int in String e String in int. Di seguito esamineremo vari esempi di lavoro con la classe. Cominciamo con la creazione. Quella più comunemente usata (e più facile da usare) è la seguente opzione di creazione:
Integer a = 3;
Cioè, l'inizializzazione di una variabile intera in questo caso è simile all'inizializzazione di una variabile int. Inoltre, una variabile intera può essere inizializzata con il valore di una variabile int:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Nel caso precedente, l'autopacking avviene implicitamente. Ne parleremo più approfonditamente di seguito. Oltre alle opzioni di inizializzazione elencate sopra, è possibile creare una variabile intera come gli altri oggetti, utilizzando un costruttore e la parola chiave new:
Integer x = new Integer(25);
System.out.println(x);
Tuttavia, richiede più tempo per scrivere e più tempo per leggere, quindi questa opzione è la meno comune. Con le variabili intere puoi fare tutto ciò che puoi fare con le variabili int. Possono essere:
Piega

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

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

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

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
Tuttavia, con tutto ciò, devi stare attento e ricordare che Integer è un tipo di dati di riferimento e una variabile di questo tipo può essere nulla. In questo caso (se la variabile è nulla), è meglio astenersi dalle operazioni aritmetiche (e da tutte le altre in cui il valore nullo non promette nulla di buono). Ecco un esempio:
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
La maggior parte delle operazioni di confronto vengono eseguite allo stesso modo del 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);
Produzione:

false
false
true
true
Spicca l'operazione di confronto di due variabili intere. E il punto qui è che Integer è un tipo di dati di riferimento e le sue variabili memorizzano riferimenti a valori e non ai valori stessi (oggetti). Manifestazioni di questo fatto possono essere osservate durante l'esecuzione del seguente frammento di codice:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);

System.out.println(a == b); // true
System.out.println(a == c); // false
Il risultato della prima uguaglianza sarà vero e il secondo sarà falso. Questo accade perché nel primo caso confrontiamo due variabili (“a” e “b”) che memorizzano riferimenti allo stesso oggetto. E nel secondo caso confrontiamo due variabili che si riferiscono a due oggetti diversi (creando la variabile “c” abbiamo creato un nuovo oggetto). Facciamo un altro esempio interessante:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a == b); // true
System.out.println(x == y); // false
Come possiamo vedere, il risultato del primo confronto è vero, mentre il risultato del secondo è falso. È tutta una questione di memorizzazione nella cache. Tutti i numeri interi nell'intervallo da -128 a 127 inclusi (questi valori possono essere personalizzati) vengono memorizzati nella cache. Quindi quando creiamo una nuova variabile e le assegniamo un valore intero compreso tra -128 e 127, non stiamo creando un nuovo oggetto, ma piuttosto assegnando alla variabile un riferimento a un oggetto già creato nella cache. Ora, conoscendo questo fatto, l’esempio sopra non sembra così mistico. Le variabili aeb si riferiscono allo stesso oggetto: un oggetto dalla cache. E durante l'inizializzazione delle variabili xey, abbiamo creato ogni volta un nuovo oggetto e queste variabili hanno memorizzato riferimenti a oggetti diversi. E come sai, l'operatore == confronta i valori delle variabili e i valori delle variabili di riferimento sono riferimenti. Per verificare accuratamente l'uguaglianza tra due variabili intere, è necessario utilizzare (non importa quanto banale possa sembrare) il metodo equals. Riscriviamo l'esempio sopra:
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

Compressione e decompressione automatica Integer

Cos'è l'imballaggio e il disimballaggio automatico? Durante la creazione di nuove variabili intere, abbiamo utilizzato la seguente costruzione:
Integer a = 2020;
In questo modo abbiamo creato un nuovo oggetto senza utilizzare il nuovo operatore chiave. Ciò è possibile grazie al meccanismo di autopacking di tipo primitivo int. La procedura inversa si verifica quando si assegna una variabile int primitiva al valore di una variabile di riferimento intera:
Integer a = 2020;
int x = a;
In questo caso, sembra che abbiamo assegnato un riferimento (vale a dire, il riferimento a un oggetto è il valore della variabile “a”) a una variabile primitiva. Ma in realtà, grazie al meccanismo di auto-unpacking, nella variabile “x” è stato scritto il valore 2020. L'auto-packing/unpacking è un fenomeno molto comune in Java. Spesso accade da solo, a volte anche all’insaputa del programmatore. Ma devi ancora conoscere questo fenomeno. Abbiamo un articolo interessante su questo argomento su Javarush .

Costanti di classe intera

La classe Integer fornisce varie costanti e metodi per lavorare con i numeri interi. In questa sezione ne vedremo più da vicino alcuni nella pratica. Cominciamo con le costanti. La tabella seguente mostra tutte le costanti della classe:
Costanta Descrizione
MISURARE Il numero di bit nel sistema numerico a due cifre occupati dal tipo int
BYTE Il numero di byte nel sistema numerico a due cifre occupati dal tipo int
MAX_VALORE Il valore massimo che un tipo int può contenere
VALORE_MIN Il valore minimo che un tipo int può contenere
TIPO Restituisce un oggetto di tipo Class dal tipo int
Diamo un'occhiata ai valori di tutte queste costanti eseguendo il seguente codice:
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);
}
Di conseguenza, otteniamo il seguente output:

32
4
2147483647
-2147483648
int

Metodi della classe Integer

Ora diamo una rapida occhiata ai metodi più utilizzati della classe Integer. Quindi, quelli "in alto" sono intitolati dai metodi per convertire un numero da una stringa o convertire una stringa da un numero. Iniziamo convertendo una stringa in un numero. Per questi scopi viene utilizzato il metodo parseInt , la firma è di seguito:
  • 
    static int parseInt(String s)
Questo metodo converte String in int. Dimostriamo come funziona questo metodo:
int i = Integer.parseInt("10");
System.out.println(i); // 10
Se la conversione non è possibile, ad esempio se abbiamo passato una parola al metodo parseInt, verrà lanciata un'eccezione NumberFormatException. Il metodo parseInt(String s) ha un fratello in sovraccarico:
  • 
    static int parseInt(String s, int radix)
Questo metodo converte il parametro s in int. Il parametro radix indica in quale sistema numerico è stato originariamente scritto il numero in s, che deve essere convertito in int. Esempi di seguito:
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8));   // 8
System.out.println(Integer.parseInt("F", 16));   // 15
I metodi parseInt restituiscono un tipo di dati primitivo int. Questi metodi hanno un analogo: il metodo valueOf . Alcune varianti di questo metodo chiamano semplicemente parseInt internamente. La differenza da parseInt è che il risultato di valueOf sarà un numero intero, non un int. Consideriamo di seguito tutte le opzioni per questo metodo e un esempio di come funziona:
  • Intero statico valore(int i) - restituisce un intero il cui valore è i;
  • static Integer valueOf(String s) - simile a parseInt(String s), ma il risultato sarà Integer;
  • static Integer valueOf(String s, int radix) - simile a parseInt(String s, int radix), ma il risultato sarà Integer.
Esempi:
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
Abbiamo esaminato i metodi che ti consentono di convertire String in int/Integer. La procedura inversa si ottiene utilizzando i metodi toString . Puoi chiamare il metodo toString su qualsiasi oggetto Integer e ottenere la sua rappresentazione in stringa:
Integer x = 5;
System.out.println(x.toString()); // 5
Tuttavia, poiché il metodo toString viene spesso chiamato implicitamente sugli oggetti (ad esempio, quando si invia un oggetto alla console per la stampa), questo metodo viene utilizzato raramente in modo esplicito dagli sviluppatori. Esiste anche un metodo statico toString, che accetta un parametro int e lo converte in una rappresentazione di stringa. Per esempio:
System.out.println(Integer.toString(5)); // 5
Tuttavia, come il metodo toString non statico, l'utilizzo esplicito di un metodo statico è raro. Più interessante è il metodo statico toString, che accetta 2 parametri interi:
  • static String toString(int i, int radix) - convertirà i in una rappresentazione di stringa nel sistema numerico radice.
Esempio:
System.out.println(Integer.toString(5, 2)); // 101
La classe Integer ha un paio di metodi per trovare il massimo/minimo di due numeri:
  • static int max(int ​​a, int b) restituirà il valore più grande tra le variabili passate;
  • static int min(int a, int b) restituirà il valore più piccolo tra le variabili passate.
Esempi:
int x = 4;
int y = 40;

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

Conclusione

In questo articolo abbiamo esaminato la classe Integer. Abbiamo parlato di che tipo di classe è questa e cosa sono le classi wrapper. Abbiamo esaminato la lezione da un punto di vista pratico. Abbiamo esaminato esempi di operazioni aritmetiche, comprese le operazioni di confronto. Abbiamo dato un'occhiata alle complessità del confronto di due variabili intere ed esaminato il concetto di oggetti memorizzati nella cache. Abbiamo anche menzionato il fenomeno dell'auto-packing/unpacking dei tipi di dati primitivi. Inoltre, siamo riusciti a esaminare alcuni metodi della classe Integer e alcune costanti. Hanno fornito esempi di conversione dei numeri da un sistema numerico a un altro.

Compiti a casa

  1. Studia quali altri metodi della classe Integer esistono (puoi studiarli sul sito con la documentazione ufficiale ), scrivi nei commenti quale tra i metodi che hai studiato (esclusi quelli riportati nell'articolo) è più utile secondo te ( verrà utilizzato da te più spesso). E fornisci anche le ragioni della tua opinione.

    PS Non ci sono risposte corrette qui, ma questa attività ti permetterà di studiare meglio la lezione.

  2. Risolvi un piccolo e semplice problema per consolidare il materiale.

    Abbiamo due numeri:

    1100001001 - nel sistema numerico binario
    33332 - nel sistema numerico quinario

    È necessario, utilizzando solo metodi della classe Integer, determinare il massimo tra due numeri dati, e quindi visualizzare la differenza tra il valore massimo e minimo nel sistema di numerazione ternario.

  3. Convertire il valore intero massimo possibile nel sistema numerico ottale e visualizzare il numero di cifre nel numero risultante (contare il numero a livello di codice).

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