Zainicjuj długi język Java


213

Prymitywne typy danych - Oracle doc mówi zakres longw Javie jest -9,223,372,036,854,775,808do 9,223,372,036,854,775,807. Ale kiedy robię coś takiego w moim zaćmieniu

long i = 12345678910;

pokazuje The literal 12345678910 of type int is out of rangebłąd „ ”.

Są 2 pytania.

1) Jak zainicjować za longpomocą wartości 12345678910?

2) Czy wszystkie literały liczbowe są domyślnie typu int?


A może zainicjujesz Długi?
Wolfgang Fahl,

1
@WolfgangFahl Te same zasady dla Long- ze względu na automatyczne boksowanie, możesz użyć Long i = 12345678910Llub użyć Long i = Long.valueOf(12345678910L)w przypadkach, w których nie możesz użyć automatycznego boksowania.
Dorian Gray

Odpowiedzi:


422
  1. Należy dodać L: long i = 12345678910L;.
  2. Tak.

BTW: nie musi to być duża litera L, ale mała litera jest mylona z 1wieloma razy :).


3
Na wypadek, gdyby ktoś się zastanawiał: to samo dotyczy hex, np.0x200000000L
użytkownik149408

@Victor Long.valueOf (long) zwraca Long, a nie pierwotny long. Rozwiązanie MByD unika polegania na automatycznym boxowaniu.
gouessej

@ user149408 Być może masz na myśli 0x20000000L?
Pluto,

2
@Pluto 0x20000000Ldziałałoby, ale nadal może być reprezentowane przez int(32-bitową liczbę całkowitą), więc 0x20000000działałoby równie dobrze. 0x200000000Lprzekracza tę granicę, powodując Lkonieczność spływu końcowego .
user149408,

58
  1. Musisz dodać Lznak na końcu numeru, aby Java rozpoznała go jako długi.

    long i = 12345678910L;
  2. Tak.

Zobacz Podstawowe typy danych, które mówią: „Literał całkowity jest typu długiego, jeśli kończy się na literę L lub l; w przeciwnym razie jest typu int”.


39

Musisz dodać wielkie litery Lna końcu w ten sposób

long i = 12345678910L;

To samo dotyczy float z 3.0f

Które powinny odpowiedzieć na oba pytania


15

Aby długo zainicjować, musisz dodać „L” na końcu.
Może być wielka lub mała.

Wszystkie wartości liczbowe są domyślnie int. Nawet jeśli wykonasz dowolną operację bytez dowolną liczbą całkowitą, bytenajpierw jest promowana, inta następnie wykonywane są dowolne operacje.

Spróbuj tego

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

Wystąpił błąd, ponieważ 2jest domyślnie int.
Dlatego staramy się mnożyć bytesię int. Stąd wynik zostaje intprzypisany do typu, do którego nie można go przypisać z powrotem byte.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.