Java数据类型总结
Java数据类型总结
-
Java的数据类型图
-
Java的基本数据类型有哪几种,范围是多少?
-
Java中float和double精度和表示范围是怎么确定的?
-
Java在定义变量时需要注意的问题
-
Java中基本数据类型之间是怎么转换的?
-
Java的引用数据类型
-
原码与补码的相互转换
-
面试题汇总
1.Java的数据类型图
2.Java的基本数据类型有哪几种?
Java中共有8种基本的数据类型
类型名称
|
变量名
|
位数
|
范围
|
默认值
|
备注
|
字节型
|
byte
|
8
|
-128~127
|
0
|
|
短整型
|
short
|
16
|
-65536~65535
|
0
|
|
整形
|
int
|
32
|
-2^31~2^31-1
|
0
|
|
长整形
|
long
|
64
|
-2^63~2^63-1
|
0
|
|
单精度浮点型
|
float
|
32
|
-3.4e38~3.4e38
|
0
|
7~8位有效数字
|
双精度浮点型
|
double
|
64
|
-1.8e308~1.8e308
|
0
|
16~17位有效数字
|
布尔型
|
boolean
|
1
|
|
false
|
(true或false)
|
字符型
|
char
|
16
|
Unicode(0~65535)
|
0(空字符)
|
注:
- 十进制整数:如-12,36,125,0等
- 二进制整数:要求以0b开头,如0b00000001
- 八进制整数:要求以0开头,如077
- 十六进制整数:要求以0x或0X开头,(A~F代表10~15)如0xAC
3.Java中float和double精度和表示范围是怎么确定的?
float精度和范围的确定:
取值范围
由指数位决定:
2^8一共可以存储255个数字:所以表示的范围是-128~127
2^128 = 340282366920938463463374607431768211456 约等于:3.4E38
所以float的范围是:-3.4E38~3.4E38
精度的确定:
float的精度是由尾数和指数共同决定的,浮点数在内存中是使用科学记数法来储存的,整数位隐含了一个1,2^23=8388608(7位),在加上整数位的1,一共有8位有效位数,前7位为绝对有效.
double精度和范围的确定:
取值范围
由指数位决定:
2^11一共可以存储2047个数字:所以表示的范围是-1024~1023
2^1024 = 1.797693134862315907729305190789e+308 约等于:1.79E308
所以float的范围是:-1.79E308~1.79E308
精度的确定:
double的精度是由尾数和指数共同决定的,浮点数在内存中是使用科学记数法来储存的,整数位隐含了一个1,2^52=4.5035996273705e+15(16位),在加上整数位的1,一共有17位有效位数,前16位为绝对有效.
4.Java在定义变量时需要注意的问题
float:在定义float变量时需在数字末尾加F或f,否则默认为double型
错误原因:将一个大范围的变量值赋值给一个小范围的变量
-
在定义一个long类型变量赋值时,建议在后面加上L,增强代码的可读性.
-
byte,short在运算时,会自动转换成int进行运算,然后得到一个int类型的值
byte a = 1; byte b = 0; byte c = a+b;//erro
错误原因:
byte在运算时会转换成int进行计算,那么将会得到一个int类型的变量,再将int类型的重新赋值给byte时将会报错(大范围变量赋值给小范围变量)
当在一个计算中有两种不同的类型时,会将小类型转换成大类型进行计算(eg:将int和long进行运算,将会转换成long进行运算),float和double一起运算,将会转换成double进行
int a = 6; long c = 7; int d =a+c;//erro
错误原因:
在运算时会将a转换成long类型进行运算,得到的结果也将会是long类型,赋值给int类型将会报错(大范围变量赋值给小范围变量报错)
5.Java中基本数据类型之间是怎么转换的?
在java中基本数据类型的转换分为以下两种:
-
自动类型转换
-
在Java中将小范围变量转换成大范围变量
注意:在进行自动类型转换的时候只考虑范围的大小,不考虑其他,范围小的变量可以转换为范围大的变量
注意:long和int的范围比float小,所以可以转换成float类型,可能会损失精度.
-
强制类型转换:
-
int转byte的实现过程:(直接砍掉前24位)
在机器中数字的存储都是以补码的形式的
eg:
int 128 ---> byte -128 实现过程
10000000为什么是-128?
int -129 ---> byte 127 实现过程:
结论:int强制转换byte的时候,只是砍掉前24位,然后得到结果(有可能为正,有可能为负) long强制转成int,只需要砍掉前32为即可,long转byte砍掉前56位.
注:Java的boolean不可以与其他类型相互转换,强制转换也是不可以的
当将超过float类型的最大值时,强制转换成float类型时,会出现无穷大.
6.Java的引用数据类型
Java的引用数据类型相当于(C语言)的指针,指向对象的实体.这类变量在声明时不会分配内存地址,只是存储了一个内存地址.
当创建一个对象(new)的时候,首先会在堆中分配一定的空间,并返回一个引用给栈中的变量.每一个对象有自己唯一的实例.
原码转补码的规则:
正数:原码与补码相同
负数:符号位不变,其余位取反,末尾加一
补码转原码的规则:
正数:补码与原码相同
负数:
a:对补码减一(得到反码)取反,可以得到所求的原码
b:对补码再次求补码,也可得到所求的原码
8.面试题汇总:
请说出下列代码运行结果
for(byte i =0;i<128;i++) { System.out.println(i); }
解释:这个是一个死循环,原因是byte的范围是-128~127,i从0加到127,当i++时变为-128,-128<128将会再次执行-128~127,以此类推,所以是一个死循环.
小白创作,大佬勿喷