2010-02-28 12 views
34

Próbuję zadeklarować długą wartość w Javie, która niestety nie działa.Dlaczego nie mogę przypisać "długiej" wartości 4 miliardów?

To jest mój kod. Powoduje to następujący komunikat o błędzie: "Dosłowne 4294967296 typu int jest poza zasięgiem".

long bytes = 4294967296; 

muszę tę wartość do filtru plików, który odfiltrowuje plików, które są większe niż 4294967296 bajtów (4GB). W drugą stronę działa bez żadnych problemów (long size = file.length()) z każdym rozmiarem pliku, dlatego nie mogę zrozumieć, dlaczego moja deklaracja nie działa.

Odpowiedz

18

spróbuj long bytes = 4294967296L;, aby wskazać kompilatorowi, że używasz long.

+0

Bardzo dziękuję Soufiane! Zawsze zadziwiający jak szybko jesteście! :) – Peter

+6

Nie ma za co. Tylko nie zapomnij przyjąć odpowiedzi. :-) –

74

Dodaj L na końcu numeru:

long bytes = 4294967296L; 
+0

Dziękuję też. Doceniam to! – Peter

+10

@Peter - powinieneś "zaakceptować" tę odpowiedź. – bacar

19

long literały są następnie pismem L lub l (patrz: JLS 3.10.1). Wielkie litery są lepsze, ponieważ są bardziej czytelne, małe litery l są zbyt podobne do 1.

dla danego numeru, to chyba łatwiej napisać:

long bytes = (1L << 32); 

ten sposób ktoś, kto czyta kod może szybko powiedzieć, że bytes jest dokładnie 2 do potęgi 32.

+0

Dobrze, bo to pierwsza rzecz, o której wszyscy myślą, kiedy widzą 1L << 32 - o, hej to 2^32 ... rofl. –

28

Aby odpowiedzieć tytuł pytanie, maksymalna wartość długo można uzyskać za pośrednictwem stałej:

Long.MAX_VALUE 

Aby rozwiązać swój problem - dodaj l (L) dosłowny po numerze.

4

Odpowiedź na pytanie "dlaczego" jest z powodu 4294967296 nie jest długa. Domyślnie java wygląda na dowolnej liczbie, jak w int lub typu podwójnego (w zależności od tego, czy ma kropkę, czy nie). I dopiero potem przekonwertuj tę liczbę na określony typ (długo w twoim przypadku). Błąd, który widzisz, oznacza, że ​​Twój numer jest większy niż maksymalna wartość fot. Int. Dodanie atrybutu literału na końcu pozwala kompilatorowi wiedzieć, jakiego typu użyć (b - bajty, s - krótkie, l - długie, f - zmienne)

Powiązane problemy