2.1 整型变量
我们学习的第一个变量,就是整数类型的变量。
Java的变量都有严格的类型,例如整数类型的变量只能赋值为整数,如果给它一个小数,就会出编译错误。
Java的整数类型最常用的是int(英文整数是integer),我们这样定义一个整型变量:
int i=8;
这句代码的意义是:定义一个整型变量i,并赋值为8。int是比较常用的类型,除此以外还有以下的整数类型,它们的区别在于数值范围:
| 类型 | 占用内存大小 | 数值范围 |
|---|---|---|
| byte | 1byte(8位) | -128~127 |
| short | 2byte(16位) | -32768~32767 |
| int | 4byte(32位) | -2147483648~2147483647 |
| long | 8byte(64位) | -9223372036854775808~9223372036854775807 |
这些最大值最小值就是通过占用的位计算出来的。例如byte占8位,其中一位用来表示正负号,那么就剩下7位,当7位全部是1,就是所能表达的最大值,那就是2的8次方减去1,相当于1111111=10000000-1
按照这个思路,位数小的可以放到位数大的变量,但是反过来的话,就有可能保存不下了。这就好像一把8尺长的东西,放入32尺的容器没问题,反过来一个32尺长的东西放入8尺的容器,那就要切掉24尺。
byte b=2;
int i=b;
//这行代码要出错
short s=i;
shorts=i显示的错误是无法将short转换成int。这就是因为大的int类型的值不能放入小的short类型变量。
四种整数类型的定义和赋值都是类似的,但long型变量要特别注意,赋值给它的整数最后要加字母L(大小写都可以,但一般用大写,因为小写和数字1太像了):
//这是错的!
long a=5147483647;
//这是正确的
long a=5147483647L;
上面第一个赋值错误原因是:任何一个数字默认为int类型,一个超过int范围的数字(末尾不加L),本身已经超过了int类型的范围,在此层面已经发生了语法错误。
练习题
-
填空题(直接填入答案,立刻批改)1.定义两个整型变量,一个命名为a,一个命名为b,初值都设置为1 (4分) [编程填空]
public static void main(String[]args){ ; ; System.out.println(a); System.out.println(b);}2.内存空间 (4分) [填空]int在内存占用32位的空间,其中一位用于表示正负数,剩下的31位就是int所能表达的最大的数:2的31次方减1,这个数字是2147483647
除了这个范围,还有别的范围的整型变量:
byte 8位
short 16位
int 32位
long 64位
请问byte类型所能表达的最大值是 ,最小值是 ?3.类型转换 (2分) [填空]不同的整数类型可以转换,例如:
byte b=8;
int i=b;
但是反过来是不行的,下面这样是会出编译错误的:
int i=8;
byte b=i;
道理很简单,int占用的内存空间是32,byte是8位,int类型的变量当然可以把byte类型的变量完全保存,反过来,byte类型的内存空间不足以保存一个int变量。
这个类型转换的原则适用于大部分的变量类型转换。
如果一定要强制转换,可以使用这个方法:
int i=8;
byte b=(byte)i;
使用(变量类型)这样的操作,但这样强制转换,就是硬塞进去,如果数据超出,就会出现奇怪的数字
b的值是 ,如果i的值是324,那么b的值是 ,这里就发生了溢出并且直接剪切掉了多余部分,于是得到一个这样的结果4.定义整型变量 (6分) [编程填空]按顺序定义整型变量。
定义一个byte变量a,赋值为1;
定义一个short变量b,赋值为2;
定义一个long变量c,赋值为2036854775807。public static void main(String[]args){ ; System.out.println(a); ; System.out.println(b); ; System.out.println(c);} -
判断题1.如果是整数5,可以用int,byte,或者short,long类型的变量来保存 (2分) [判断]2.下面的代码有语法错误 (2分) [判断]
long te=69L;3.下面的代码有语法错误 (2分) [判断]int i=8L;