Java基本类型与类型转换咋就这么烦?

在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)

1.整型
类型              存储需求     bit数    取值范围      备注
int                 4字节           4*8 
short             2字节           2*8    -32768~32767
long              8字节           8*8
byte              1字节           1*8     -128~127

2.浮点型
类型              存储需求     bit数    取值范围      备注
float              4字节           4*8                  float类型的数值有一个后缀F(例如:3.14F)
double          8字节           8*8                       没有后缀F的浮点数值(如3.14)默认为double类型

3.char类型
类型              存储需求     bit数     取值范围      备注
char              2字节          2*8

4.boolean类型
类型              存储需求    bit数    取值范围      备注
boolean        1字节          1*8      false、true

 

 1 package com.RainFool.Test;

 2 

 3 /**

 4 * <p>Title: Cast</p>

 5 * <p>Description: 本例用来在博客园上解释类型转换</p>

 6 * <p>Company: LTGames</p> 

 7 * @author RainFool

 8 * @date 2014年7月1日

 9 */

10 public class Cast {

11     public static void main(String [] args) {

12         /*

13          * Widening conversion 扩展转换对于Java中的基本类型基本都能自动进行,

14          * 也就是说占用字节数低的类型可以自动向占用字节数高的类型转换(除了boolean、byte)

15          */

16         

17         byte b = 0;

18         char c = 'A';

19         short st = 65;

20         //byte、char、short向int自动转换

21         int i1 = c;

22         int i2 = b;

23         int i3 = st;

24         /*

25          * 同样的,int也可以向double转换,在此不再赘述

26          */

27         

28         /*

29          * narrowing conversion窄化操作比较复杂,在此只总结我所验证的

30          * int类型可以在特定条件(高字节向低字节)下自动进行窄化转换,在强制进行类型转换的时候会对数值直接截断

31          * double,float不可以自动转换为int,因为浮点数和普通数字之间的差别比较大

32          */

33 //        short st4 = 1024 * 32;//编译报错,short类型有一个符号位所以这里用2^15测试

34         short st4 = 1024 * 32 - 1;//不报错,发生了窄化操作的自动转换,值为32767

35         short st5 = (short)(1024 * 32);//不报错,发生了窄化操作的强制转换,值为-32768

36 

37 //        char c4 = 1024 * 64;//编译报错,char类型无符号所以用2^16测试

38         char c4 = 1024 * 64 -1;//不报错,发生了窄化操作的自动转换

39         

40 //        byte bt4 = 128;//编译报错

41         byte bt4 = 128 - 1;//不报错,发生了窄化操作的自动转换

42         byte bt5 = (short)(128 - 1);//不报错,在强制将int转换为short后发生了窄化操作的自动转换

43         

44         

45          /*

46           * 总结:非浮点数之间如果数值在范围内,可以自动进行转换,不管是窄化还是扩展转换

47           */

48     }

49 }

 

 

 

你可能感兴趣的:(java)