Long.parseLong în Java

Long este wrapperul pentru long (întregi pe 64 de biți); parseLong și valueOf transformă textul în număr.

Sintaxă
public final class Long extends Number implements Comparable<Long>, Constable, ConstantDesc
static long parseLong(String s)
static long parseLong(String s, int baza)
static Long valueOf(String s)
static Long valueOf(long l)

Ce face Long.parseLong

long ține numere întregi pe 64 de biți, până la aproximativ 9,2 miliarde de miliarde (Long.MAX_VALUE = 9223372036854775807). Îl folosești pentru sume mari, populații, milisecunde sau numere de telefon tratate ca numere. Clasa Long este varianta obiect, folosită în colecții.

Long.parseLong(s) citește un text și returnează un long; Long.valueOf(s) returnează un obiect Long. Regulile sunt aceleași ca la Integer.parseInt: fără spații, fără zecimale, iar textul invalid aruncă NumberFormatException. Textul nu poate avea sufixul L folosit în cod.

Parametri

Parametru Descriere
s Textul cu numărul.
baza Baza de numerație (2–36), implicit 10.
l Pentru valueOf(long): valoarea de împachetat.

Ce returnează

parseLong: un long. valueOf: un Long.

Exemple

Exemplul 1: Numere prea mari pentru int

public class Main {
    public static void main(String[] args) {
        String populatie = "19050000";
        String bugetLei = "584300000000";
        long p = Long.parseLong(populatie);
        long b = Long.parseLong(bugetLei);
        System.out.println("Buget pe locuitor: " + b / p + " lei");
        try {
            Integer.parseInt(bugetLei);
        } catch (NumberFormatException e) {
            System.out.println("Nu încape în int: " + e.getMessage());
        }
        System.out.println(Long.MAX_VALUE);
    }
}

Rezultat

Buget pe locuitor: 30671 lei
Nu încape în int: For input string: "584300000000"
9223372036854775807

Exemplul 2: valueOf și un literal long

În cod, un număr long mare se scrie cu sufixul L; în text, sufixul nu este acceptat.

import java.util.List;

public class Main {
    public static void main(String[] args) {
        Long a = Long.valueOf("3000000000");
        long b = 3_000_000_000L;
        System.out.println(a.equals(b));
        List<Long> sume = List.of(a, b, Long.valueOf(250L));
        long total = 0;
        for (long s : sume) {
            total += s;
        }
        System.out.println("Total: " + total);
        try {
            Long.parseLong("100L");
        } catch (NumberFormatException e) {
            System.out.println("Invalid: " + e.getMessage());
        }
    }
}

Rezultat

true
Total: 6000000250
Invalid: For input string: "100L"

Greșeli frecvente

  • Scrii long x = 3000000000; fără L: compilatorul spune că numărul este prea mare pentru int. Scrie 3000000000L.
  • Calculezi int * int și pui rezultatul într-un long: înmulțirea se face tot în int și dă overflow înainte de atribuire. Fă unul dintre operanzi long.
  • Compari două Long cu ==; folosește equals.

Comenzi înrudite

  • Integer.parseInt: Transformă un text ca „42” în numărul întreg 42; valueOf face același lucru, dar returnează un obiect Integer.
  • Double.parseDouble: Double este wrapperul pentru double; parseDouble și valueOf transformă un text ca „3.75” în număr cu zecimale.
  • Integer: Clasa wrapper pentru int: obiectul care învelește un număr întreg, plus constante și metode de conversie.
  • Math.multiplyFull: multiplyFull înmulțește două int-uri cu rezultat long complet; multiplyHigh dă jumătatea de sus a produsului a două long-uri.