以下代码皆在eclipse内进行操作
基本数据类型
1.整型
概念:就是存储整数的数据类型.整型数据类型根据占用的内存空间位数不同分为四种:
byte(字节),short(短整型),int(整型),long(长整型) .
类型 | 占位 | 字节 | 取值范围 | 整数范围 |
byte字节类型 | 8位 | 1个字节 | -2^7 ~ 2^7-1 | -128 ~ 127 |
short短整型 | 16位 | 2个字节 | -2^15 ~ 2^15-1 | -32768 ~ 32767 |
int整型 | 32位 | 4个字节 | -2^31 ~ 2^31-1 | 大约21个亿 |
long长整型 | 64位 | 6个字节 | -2^63 ~ 2^63-1 |
取值范围减一的原因:最高位是符号位,最高位为0表示正数,最高位为1表示负数.
以byte为例:用二进制表示,最小值表示:1000_0000,最大值表示:0111_1111.
负整数转换的方式:
1.先取反
2.再加一
例子:
原数据:1100_0000
取反后:0011_1111
加一后:0100_0000
转十进制:64
最高位为0是正数,无需添加符号.
使用四种数据类型:
发现在第21行报错,如果想要解决这个错误则需要在这个数据后加一个l或者L.
为什么需要通过添加l或者L就可以解决错误呢,明明所输入的数据根本没有超过long类型的数据范围.
事实上,在Java 中,如果传入的数据时整数,那么系统将会默认其为int类型,所以在第一张图片里,第二十一行的数据被系统识别成了int类型,此时数据超过了int的取值范围,所以报错,故添加l和L就是为了告诉系统:"我现在是long不是int,不要搞错啦!"
*整型的注意事项(我们老师上课说的,从老师那拿来用的)
1)整数的字面量(直接量)默认为int类型,如:22,123;(字面量不可变)
2)如果字面量在较小的范围内,可以直接为小类型赋值;
byte b = 10;//10虽然为int类型,但是在byte的范围内
byte c = 128//编译失败,128超出byte的范围
思考:以下代码能否编译通过 1. int a = 1; 2. byte b = a; |
思考题答案:不行;
理由:程序在编译时由上至下一个个执行,在第一行时系统已经明确了a就是int,然后在第二行时系统就会想,a是int,b是byte,a的数据范围比b大,你要我把大的变成小的,我又不傻,我才不这么干,然后就报错了,它不会想其实我的a只有1,是在byte范围里的,至于byte b = 10为什么,因为程序执行到这一行代码时,系统就等同于是直接见到了10这个数据,中间没有经过int a这种想要赚差价的中间商,就很自然地想到我的10是在byte范围内的,不会存在亏了这个问题,所以此时就通过啦.
即使它有默认成int类型的这种功能,但没有你自己来强调它是int来的强烈.而且你不能每次都确定int a的大小是在byte范围内的
总结:没有中间商(int a),程序好,我也好.
3)Java中,字面量如果使用0开头表示8进制,0B/0b开头表示十六进制.
二进制:只能用0或1来表示,不能超过1,如int a = 0b1100_0000;
八进制:0到7,如int b = 0300;
十六进制:0到9 a到f/A到F(表示10到15),如int c = 0xc00;
十进制: 0到9,如int d = 110;
2.浮点型变量
类型名 | 大小/位 | 精度说明 |
float(单精度浮点类型) | 32 | 符号位1位,指数位8位,尾数位23位 |
double(双精度浮点类型) | 64 | 符号位1位,指数位11位,尾数位52位 |
关于指数位与尾数位:
采用科学计数法:
用十进制举例: 123456 = 1.23456*10^5 尾数:23456,指数:5,基数:10
用二进制举例: 10111 = 1.0111*2^100 尾数:0111,指数:100,基数:2
尾数来决定精度.
使用数据类型:
发现在第24行报错,有了上面的long的铺垫,我相信读者们应该也有自己的猜想了,事实上,这里只需要在12.54678后加一个f或者F就行啦.
原因:在Java中,如果传入的数据是小数类型,那么将会将其默认为double类型,如果不添加f或F的话,在第一张图的第24行就等同于将double类型的值直接付给float类型,但是double的精度比float高,所以系统会再一次想到自己亏了,所以会报错.它这个就和整型里不同了,整型里这么写没问题,但浮点型绝对不行,你可以这么想,在浮点型里它对于默认为double这个规则执行的非常严格.
虽然默认是double类型,但是你写double d1 = 1.2和写double d2 = 1.2d (写d和D都可以)都是对的,但没必要去加个d或D.
*对于int,long,float,double精度从小到大的顺序为:
float < int < double < long
原因:观察它们四个的精度位,int和long除了最高位为符号位外,其他的都是精度位,所以int的精度位为31,long的精度位为63,而对于浮点型而言,它们的精度是由尾数位来掌控的,所以float的精度位为23,而double的精度位为52,故排序大小为: float < int < double < long.
*浮点型注意事项
1)浮点型对于超出精度范围的数据可以进行四舍五入,可以将int类型赋值给float类型,但精度会丢失.
由上面两张图可以看出i3 = i2 - 1,但是最后分别赋值给f3和f4时,得到的结果是一样的,由此可以证明在int类型赋值给float类型时存在精度损失和四舍五入的现象.
2)浮点型底层计算的规则在浮点型计算时会出现精度问题,尽量避免对浮点型进行比较.
看到这应该知道了,浮点型它就是太精确了,导致在有些实际运用中会造成一些不必要的影响.
3.字符型变量
概念:字符型变量就是存放字符常量的变量,底层使用16位无整型表示,即它可以表示2^16个值,在Java中,字符类型的字面量用单引号或Unicode编码或者ascii码来表示,记住单引号中只能用于表示单个字符.(多个字符用双引号表示为字符串,"a"这样也叫字符串,'ab'就会报错,'张'也可以)
*Java底层字符是作为一个整数来保存的.
(图片来源于网络)
其中48代表0,65代表A以及97代表a一定要记牢!!!
对于特殊字符用转义符来表示,以下为常用的几个:
转义 | 含义 |
\n | 表示换行 |
\t | 表示制表符,等同于table键 |
\' | 表示单引号 |
\'' | 表示双引号 |
\\\ | 表示斜杠\ |
4.布尔型变量
在Java中只能用true和false来表示真和假,而这个true和false就是boolean型.
如果有同学发现了错误,请帮忙指出,谢谢!!!