if ( 1_000_000_000L + 2_000_000_000L > 0 )
System.out.println("Obviously True");
else
System.out.println("What???");
Obviously True
The L at
the end of the integer literals makes them data type long.
The sum of 3 billion (1 billion + 2 billion) DOES correctly fit into an long.
The literals in the if are of type long, so in this case overflow is avoided.
long
Data type long uses 64 bits, which can express integers
int the range -9×1018 to +9×1018
But sometimes even that is not enough. Look at the following:
long a = 5_000_000_000L ;
long b = 7_000_000_000L ;
System.out.println("The product of " + a + " and " + b + " is " + (a*b) );
The product of 5000000000 and 7000000000 is -1893488147419103232
The expected product, 35_000_000_000_000_000_000
is larger than the upper limit for long,
+9×1018.
So again, overflow happens.
Here's an idea: why not use double to represent numbers?
double has the range (roughly) -1.7×10308 to +1.7×10308.
Surely that is large enough.