27

Why do I get an int number is too large where the long is assigned to min and max?

/*
long: The long data type is a 64-bit signed two's complement integer.
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of         9,223,372,036,854,775,807 (inclusive).
Use this data type when you need a range of values wider than those provided by int.
*/
package Literals;

public class Literal_Long {
     public static void main(String[] args) {
        long a = 1;
        long b = 2;
        long min = -9223372036854775808;
        long max = 9223372036854775807;//Inclusive

        System.out.println(a);
        System.out.println(b);
        System.out.println(a + b);
        System.out.println(min);
        System.out.println(max);
    }
}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
Aaron
  • 11,239
  • 18
  • 58
  • 73

2 Answers2

77

All literal numbers in java are by default ints, which has range -2147483648 to 2147483647 inclusive.

Your literals are outside this range, so to make this compile you need to indicate they're long literals (ie suffix with L):

long min = -9223372036854775808L;
long max = 9223372036854775807L;

Note that java supports both uppercase L and lowercase l, but I recommend not using lowercase l because it looks like a 1:

long min = -9223372036854775808l; // confusing: looks like the last digit is a 1
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1

Java Language Specification for the same

An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1).

Suresh Atta
  • 120,458
  • 37
  • 198
  • 307
Bohemian
  • 412,405
  • 93
  • 575
  • 722
25

You must use L to say to the compiler that it is a long literal.

long min = -9223372036854775808L;
long max = 9223372036854775807L;//Inclusive
Petar Minchev
  • 46,889
  • 11
  • 103
  • 119