Ce face Math.toIntExact
Conversia (int) x dintr-un long păstrează doar ultimii 32 de biți: dacă numărul este prea mare, rezultatul este o valoare fără legătură cu originalul, poate chiar negativă. Math.toIntExact(x) returnează același număr ca int dacă încape și aruncă ArithmeticException dacă nu.
Este util când o metodă îți dă un long (de exemplu stream.count() sau dimensiunea unui fișier) și ai nevoie de un int pentru un array sau un index.
Parametri
| Parametru | Descriere |
|---|---|
valoare |
Numărul long de convertit. |
Ce returnează
Valoarea ca int.
Exemple
Exemplul 1: Conversie sigură față de cast
public class Main {
public static void main(String[] args) {
long mic = 2026L;
long mare = 5_000_000_000L;
System.out.println(Math.toIntExact(mic));
System.out.println((int) mare);
try {
System.out.println(Math.toIntExact(mare));
} catch (ArithmeticException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
2026
705032704
Eroare: integer overflow
Exemplul 2: Numărul de elemente dintr-un stream
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> orase = List.of("Iași", "Cluj", "Arad", "Bacău", "Alba Iulia");
long cuA = orase.stream().filter(o -> o.startsWith("A")).count();
String[] rezultat = new String[Math.toIntExact(cuA)];
System.out.println("Spațiu pentru " + rezultat.length + " orașe");
}
}
Rezultat
Spațiu pentru 2 orașe
Greșeli frecvente
- Folosești
(int)pe unlongcare vine din exterior (fișier, bază de date). O valoare mare devine în tăcere un număr greșit.
Comenzi înrudite
Math.addExact: Adunare, scădere, înmulțire, incrementare și negare care aruncă ArithmeticException la overflow în loc să dea rezultat greșit.Math.max: max() și min() aleg cel mai mare sau cel mai mic dintre două numere; clamp() încadrează o valoare între două limite.Long.parseLong: Long este wrapperul pentru long (întregi pe 64 de biți); parseLong și valueOf transformă textul în număr.Integer: Clasa wrapper pentru int: obiectul care învelește un număr întreg, plus constante și metode de conversie.