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

Wenn ich die obige Aussage zu verwenden, ich (ich nicht l am Ende verwendet habe) keinen Fehler, aber wenn ich die unten Anweisung verwenden, erhalte ich diese Fehler:Mit dem Buchstaben L in langer Variablendeklaration

The literal 3244444444 of type int is out of range

long l2 = 3244444444; 

Wenn ich long l2 = 3244444444l; verwenden, dann gibt es keinen Fehler.

Was ist der Grund dafür? Die Verwendung von l ist für lange Variablen nicht obligatorisch.

Antwort

6

3244444444 wird als eine literale Ganzzahl interpretiert, kann aber nicht in eine 32-Bit-Variable int passen. Es braucht ein wörtliche lange Wert zu sein, so braucht es eine l oder L am Ende:

long l2 = 3244444444l; // or 3244444444L 

Weitere Informationen:

+1

Aber ich erklärte als long.How es als ganze Zahl interpretiert – PSR

+0

@PSR die Variable ist integer, die wörtliche Wert wird interpretiert als 'int' und wenn sie auf die' long' Variablen zugewiesen wird, wird es zu einem ' langer Wert. Siehe den Link in meiner Antwort für weitere Informationen. –

+0

Danke für die Hilfe – PSR

0

Beachten Sie, dass während int Literale Auto-verbreitert lang sein wird, wenn auf eine lange Variablen zugewiesen wird, müssen Sie eine explizite lange wörtliche verwenden, wenn ein Wert ausdrückt, die

  1. größer als Integer.MAX_VALUE (2147483647) ist

    (oder)

  2. weniger als Integer.MIN_VALUE (-2147483648):

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