整数类型在使用的过程中,常见的问题有以下几点:
1) 整数直接量超出了整数的范围。
2) 关于整数的除法:两个整数相除,会舍弃小数的部分,结果也是整数。
3) 整数运算的溢出:两个整数进行运算时,其结果可能会超过整数的范围而溢出。
4) 表示long直接量,需要以 L 或 l 结尾。
下面分别做详细介绍
(1):整数直接量超出了整数的范围
int是最常用的整数类型。一个int类型的变量占用4个字节(32位),最大表示范围为:-2^31 ~ 2^31-1,即 -2147483648 ~2147483647。
整数直接量(literal), 即直接写出的整数。整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误。请看如下代码:
int d = 10000000000;
以上代码中,10000000000不属于int类型的直接量,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。
(2):关于整数的除法
在Java中,两个整数相除,会舍弃小数的部分,结果也是整数。请看如下代码:
int c = 5/3;
System.out.println(c); // c的值为1
在上述代码中,运行后,c的值为1。说明两个整数相除,舍弃了小数部分,只保留了整数部分。
(3):整数运算的溢出
两个整数进行运算时,其结果可能会超过整数的范围而溢出,请看如下代码:
int a = 2147483647;
int b = -2147483648;
a = a + 1;
b = b - 1;
System.out.println("a=" + a);
System.out.println("b=" + b);
上述代码运行后的输出结果为:
a=-2147483648
b=2147483647
变量a最初的值为2147483647,是int类型的最大值,加1以后出现了溢出现象,a的值变成了int类型的最小值。而b变量最初赋的值为-2147483648,是int类型的最小值,减1以后出现了溢出现象,b的值变成了int类型的最大值。这显然不符合加法和减法的规则,所以,在今后使用的时候要注意类似的问题。
步骤四:表示long直接量,需要以 L 或 l 结尾
在表示整数时,如果int类型的范围不够,可以使用long型,一个long型的变量占用8个字节(64位),最大表示范围为:-2^63 ~ 2^63-1,即 -9223372036854775808 ~ 9223372036854775807。当一个直接量超过int类型的最大值时,那要用long类型来表示,如果要表示long直接量,需要以 L 或 l 结尾。请看下列代码:
long a = 10000000000; // 会有编译错误
long b = 10000000000L;
上述代码中,10000000000超过了int类型的最大值,把它直接赋值给long类型会出现编译错误。需要像变量b那样在10000000000后边加L。
|
|