Was ist eine long-Variable?

Eine Variable vom Typ long dient genauso wie eine Variable vom Typ int zum Speichern von ganzen Zahlen.
Der Typ int ist 32 Bit lang und hat einen Wertebereich von -231 bis 231-1.
Der Typ long ist 64 Bit lang und hat einen Wertebereich von -263 bis 263-1.

Zur Typkompatibilität: Einer long-Variable kann ein int-Wert zugewiesen werden. Da eine long-Variable einen größeren Wertebereich wie eine int-Variable hat, kann die Zuweisung einer long-Variable an eine int-Variable nur mit explizitem Cast erfolgen.

public static void main(String[] args) {
    long a = 4294967298L;
    System.out.printf("a = %64s\n", toBinaryString(a));
    int b = (int) a;
    System.out.printf("b = %64s\n", toBinaryString(b));
}

// Ausgabe:
// a = 0000000000000000000000000000000100000000000000000000000000000010 (4294967298)
// b =                                 00000000000000000000000000000010 (         2)

// Hilfsmethoden zur formatierten Ausgabe

static String toBinaryString(int n) {
    StringBuilder sb = new StringBuilder(Long.toBinaryString(n));
    while (sb.length() < 32) {
        sb.insert(0, '0');
    }
    return sb.toString();
}

static String toBinaryString(long n) {
    StringBuilder sb = new StringBuilder(Long.toBinaryString(n));
    while (sb.length() < 64) {
        sb.insert(0, '0');
    }
    return sb.toString();
}

Wird einer int-Variable ein long-Wert zugewiesen, ist auf den Wertebereich zu achten. In Zeile 2 wird die long-Variable a mit dem Wert 232 + 2 belegt. Die Ausgabe in Zeile 9 zeigt die Zahl a im Binärformat.
In Zeile 4 wird a der int-Variable b zugewiesen. Die Ausgabe in Zeile 10 zeigt die Zahl b im Binärformat. Man sieht, dass beim Cast nur die 32 niedrig wertigen Bits (Bit 0 … 31) übernommen werden. Die Variable b hat nach dem Cast den Wert 2.