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 }

 

 

 

posted @ 2014-07-01 11:59  RainFool  阅读(443)  评论(0编辑  收藏  举报