- 8种基本数据类型及其字节数 (一个字节是8位)
数据类型 | 关键字 | 字节数 | |
数值型 | 整数型 | byte | 1 |
short | 2 | ||
int | 4 | ||
long | 8 | ||
浮点型 | float | 4 | |
double | 8 | ||
布尔型 | boolean | 1(位) | |
字符型 | char | 2 |
char类型其实是和int short一样,都是整数,只是取值范围不同
整数默认是int,浮点默认是double。
2.类型转换
自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。
char->short->int->long->float->double(注意是基本数据类型)
强制转换规则:高级变为低级需要强制转换。
如何转换:
(1)、赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。
(2)、赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。
(3)、可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。
示例:
(1)、
short s = 3 ;
s+=4;(一次运算)。底层存在强转,s=(short(s+1))
s=s+4;(两次运算)。右边不能确定长度,因为不是常量,所以这样写编译是会报错的,加4已经自动类型提升,在又赋值给short类型的就会丢失精度。如果显示的强转是可以的 s= (short)(s+4);
(2)、float f=3.4;是否正确
不正确,3.4是double类型,左边是float,想下类型转换需要强转,或者写成3.4f。
(3)float a = 98 可以吗?
可以,98是int类型,向上类型转换
(4)Float a = 98 可以吗?
不可以,98是int类型,就算是自动装箱为Integer,也不能转为Float类型,类型不匹配。
3.char类型运算
(1)char在java中称为“字符型”,占2个字节。字符常量是用单引号括起的一个字符,且字符常量在内存中存储的是该字符在Unicode字符集中的排序位置,即整数,所以使用char类型可以进行位运算。
比如:
char y='b';
内存y中存储的是字符’b’在Unicode字符集中的排序位置98。【可以通过语句System.out.println((int)y);来获取Unicode的排序位置。】因此上面的语句也可以写成:char y=98;
System.out.println(++y);语句,先执行++y,结果为99,然后输出对应位置的字符’c’
(2)java中的“向上兼容”,即:不同数据类型的数据参与运算,数据类型要强制转换,转换的方向是:char->short->int->long->float->double。
在System.out.println(y+1);这个语句中,y是char类型,1是int类型,所以把y强转成int,然后运算结果是99,输出也是int类型99