2013-07-19 11 views
5
long l2 = 32; 

Gdy używam powyższe stwierdzenie, nie pojawia się błąd (nie używany l na końcu), ale kiedy użyć poniższego oświadczenia, mam to błąd:Korzystanie literę L w długim deklaracji zmiennej

The literal 3244444444 of type int is out of range

long l2 = 3244444444; 

Jeśli używam long l2 = 3244444444l;, wtedy nie ma żadnego błędu.

Jaki jest tego powód? Użycie l nie jest obowiązkowe w przypadku długich zmiennych.

Odpowiedz

6

3244444444 interpretuje się jako liczbę całkowitą, ale nie mieści się w 32-bitowej zmiennej int. To musi być dosłowne długo wartość, więc potrzebuje l lub L na koniec:

long l2 = 3244444444l; // or 3244444444L 

Więcej informacji:

+1

Ale ja zadeklarowane jako long.How ona interpretowana jako liczba całkowita – PSR

+0

@PSR zmienna jest liczba całkowita, wartość jest interpretowana jako dosłowny 'int' i gdy jest przypisana do zmiennej long'' stanie się ' długa wartość. Zobacz link w mojej odpowiedzi, aby uzyskać więcej informacji. –

+0

Dzięki za pomoc – PSR

0

Należy pamiętać, że podczas int literały zostanie automatycznie rozszerzyły się długo po przypisaniu do długiej zmiennej, trzeba będzie użyć wyraźne długo dosłowny gdy wyrażając wartość, która jest

  1. większa niż Integer.MAX_VALUE (2147483647)

    (lub)

  2. poniżej Integer.MIN_VALUE (-2147483648):

    long x1 = 12; //OK 
    long x2 = 2147483648; // not OK! That's not a valid int literal 
    long x3 = 2147483648L; // OK