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中基本数据类型的转换分为以下两种:
  • 自动类型转换
  1. 在Java中将小范围变量转换成大范围变量
 
注意:在进行自动类型转换的时候只考虑范围的大小,不考虑其他,范围小的变量可以转换为范围大的变量
注意:long和int的范围比float小,所以可以转换成float类型,可能会损失精度.
 
  • 强制类型转换:
  1. 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)的时候,首先会在堆中分配一定的空间,并返回一个引用给栈中的变量.每一个对象有自己唯一的实例.
 
7.原码与补码的相互转换
 
原码转补码的规则:
正数:原码与补码相同
负数:符号位不变,其余位取反,末尾加一
补码转原码的规则:
正数:补码与原码相同
负数:
    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,以此类推,所以是一个死循环.
 
小白创作,大佬勿喷
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

posted @ 2018-11-02 15:30  Bug研发工程师  阅读(504)  评论(0编辑  收藏  举报