Inicialize um longo em Java


213

Tipos de dados primitivos - o oracle doc diz que o intervalo longem Java é -9,223,372,036,854,775,808para 9,223,372,036,854,775,807. Mas quando eu faço algo assim no meu eclipse

long i = 12345678910;

mostra-me " The literal 12345678910 of type int is out of range" erro.

Existem 2 perguntas.

1) Como inicializo o longcom o valor 12345678910?

2) Todos os literais numéricos são por padrão do tipo int?


E que tal inicializar um Long?
Wolfgang Fahl

1
@WolfgangFahl Mesmas regras para Long- devido ao boxe automático, você pode usar Long i = 12345678910Lou Long i = Long.valueOf(12345678910L)para os casos em que não pode usar o boxe automático.
Dorian Gray

Respostas:


422
  1. Você deve adicionar L: long i = 12345678910L;.
  2. Sim.

BTW: não precisa ser um L maiúsculo, mas o minúsculo é confundido com 1muitas vezes :).


3
Apenas no caso de alguém estava me perguntando: o mesmo vale para hex, por exemplo0x200000000L
user149408

@Victor Long.valueOf (long) retorna um Long, não um longo primitivo. A solução da MByD evita confiar no boxe automático.
gouessej

@ user149408 Talvez você queira dizer 0x20000000L?
Plutão

2
O @Pluto 0x20000000Lfuncionaria, mas ainda pode ser representado por int(um número inteiro de 32 bits), assim 0x20000000também funcionaria. 0x200000000Lrompe esse limite, tornando a trilha Lnecessária.
user149408

58
  1. Você precisa adicionar o Lcaractere no final do número para que o Java o reconheça por muito tempo.

    long i = 12345678910L;
  2. Sim.

Consulte Tipos de dados primitivos, que diz "Um literal inteiro é do tipo long se termina com a letra L ou l; caso contrário, é do tipo int".


39

Você precisa adicionar letras maiúsculas Lno final assim

long i = 12345678910L;

O mesmo se aplica ao float com 3.0f

O que deve responder às duas perguntas


15

Para inicializar por muito tempo, você precisa anexar "L" ao final.
Pode ser maiúscula ou minúscula.

Todos os valores numéricos são por padrão int. Mesmo quando você faz qualquer operação bytecom qualquer número inteiro, byteé promovido primeiro para inte, em seguida, qualquer operação é executada.

Tente isto

byte a = 1; // declare a byte
a = a*2; //  you will get error here

Você recebe um erro porque 2é por padrão int.
Assim que você está tentando multiplicar bytecom int. Portanto, o resultado é tipificado para o intqual não pode ser atribuído novamente byte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.