Warum kann ich einen "Long" Wert von 4 Milliarden nicht zuweisen?
Ich versuche zu erklären, ein long-Wert in Java, die funktioniert leider nicht.
Dies ist mein code. Es resultiert die folgende Fehlermeldung: "Die wörtliche 4294967296 des Typs int liegt außerhalb des gültigen Bereichs".
long bytes = 4294967296;
Brauche ich diesen Wert, damit ein Datei-filter, der filtert Dateien, die größer als 4294967296 bytes (4 GB). Umgekehrt funktioniert ohne Probleme (long size = file.length()
) mit jeder Datei Größe, die ist, warum ich kann nicht herausfinden, warum meine Erklärung nicht funktioniert.
InformationsquelleAutor der Frage Peter | 2010-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen
L
am Ende der Nummer:InformationsquelleAutor der Antwort icktoofay
Ihre Frage zu beantworten-Titel, der maximale Wert lange erhalten werden kann über die Konstante:
Um Ihr problem zu lösen, fügen Sie die
l
(L
) literal nach der Zahl.InformationsquelleAutor der Antwort Bozho
long
Literale sind, gefolgt von den BuchstabenL
oderl
(siehe: JLS 3.10.1). Großbuchstaben ist besser, weil es besser lesbar, Kleinbuchstabenl
sieht zu ähnlich1
.Für Ihre bestimmte Zahl, es ist wohl einfacher zu schreiben:
Diese Weise, jemanden, der den code liest, kann schnell erkennen, dass
bytes
ist genau 2 hoch 32.InformationsquelleAutor der Antwort polygenelubricants
versuchen
long bytes = 4294967296L;
zeigen dem compiler, dass Sie verwenden einelong
.InformationsquelleAutor der Antwort Soufiane Hassou
Die Antwort auf Ihre Frage "warum" ist, weil der 4294967296 nicht lange. Durch die Standard-java-look auf eine beliebige Zahl als auf int-oder double-Typ (je nachdem, ob es hat oder nicht Punkt). Und nur dann konvertieren Sie diese Zahl zur angegebenen Typ (long in Ihrem Fall). Also die Fehler, die Sie sehen, bedeutet, dass Ihre Zahl größer ist als max-Wert für int. Hinzufügen von literalen Attribut am Ende lassen compiller wissen, welche Art zu verwenden, (b - Byte, s - kurz, l - lang, f - float)
InformationsquelleAutor der Antwort user1660016
Soufiane korrekt ist. Hier ist ein Dokument, das zeigt, wie erklären Literale verschiedener Typen von zahlen in Java:
http://www.janeg.ca/scjp/lang/literals.html
InformationsquelleAutor der Antwort Doug Porter