问题
在我们使用整数类型的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,避免出错。即使出现错误也可以很快的找到问题所在。
方案
整数类型在使用的过程中,常见的问题有以下几点:
1)整数直接量超出了整数的范围。
2)关于整数的除法:两个整数相除,会舍弃小数的部分,结果也是整数。
3)整数运算的溢出:两个整数进行运算时,其结果可能会超过整数的范围而溢出。
4)表示long直接量,需要以L或l结尾。
步骤
实现此案例需要按照如下步骤进行。
步骤一:整数直接量超出了整数的范围
int是最常用的整数类型。一个int类型的变量占用4个字节(32位),最大表示范围为:-2^31~2^31-1,即 -2147483648~2147483647。
整数直接量(literal),即直接写出的整数。整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误。请看如下代码:
int d=10000000000;
以上代码中,1000000000不属于int类型的直接量,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。
步骤二:关于整数的除法
在Java中,两个整数相除,会舍弃小数的部分,结果也是整数。请查看如下代码:
int c=5/3;
System.out.println(c);//c的值为1
在上述代码中,运行后,c的值为1。说明两个整数相除,舍弃了小数部分,只保留了整数部分。
步骤三:整数运算的溢出
两个整数进行运算时,其结果可能会超过整数的范围而溢出,请看如下代码:
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。