2012-01-19 20 views
16

Perché ottengo un numero int troppo grande dove il long è assegnato a min e max?Errore troppo lungo numero troppo lungo Java?

/* 
long: The long data type is a 64-bit signed two's complement integer. 
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of   9,223,372,036,854,775,807 (inclusive). 
Use this data type when you need a range of values wider than those provided by int. 
*/ 
package Literals; 

public class Literal_Long { 
    public static void main(String[] args) { 
     long a = 1; 
     long b = 2; 
     long min = -9223372036854775808; 
     long max = 9223372036854775807;//Inclusive 

     System.out.println(a); 
     System.out.println(b); 
     System.out.println(a + b); 
     System.out.println(min); 
     System.out.println(max); 
    } 
} 
+1

È possibile utilizzare '' Long.MIN_VALUE' e Long.MAX_VALUE' o '1L << -1' e' -1L >>> 1' –

risposta

54

Tutti i numeri letterali in Java sono di default ints, che ha gamma -2147483648-2147483647 compreso.

I suoi letterali sono al di fuori di questo intervallo, in modo da rendere questa compilazione è necessario indicare che sono long letterali (cioè suffisso con L):

long min = -9223372036854775808L; 
long max = 9223372036854775807L; 

Nota che Java supporta sia maiuscole e minuscole Ll, ma mi raccomando non utilizzando minuscole l perché sembra un 1:

long min = -9223372036854775808l; // confusing: looks like the last digit is a 1 
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1 

Java Language Specification per lo stesso

Un numero intero letterale è di tipo lungo se viene suffisso una lettera ASCII L o L (elle); altrimenti è di tipo int (§4.2.1).

+0

essere pedanti: Si potrebbe anche usare un piccolo 'l '. – helpermethod

+8

@OliverWeiler Direi, per essere pedante, potresti ** ma non dovresti ** usare un piccolo __l__ perché sembra un __1__. – TC1

+0

Sembra un 1 solo se si utilizza un carattere errato, ma certo, perché rischiare la confusione. – Bladt

17

È necessario utilizzare L per dire al compilatore che è un valore letterale lungo.

long min = -9223372036854775808L; 
long max = 9223372036854775807L;//Inclusive 
Problemi correlati