在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基本类型与类型转换咋就这么烦?,布布扣,bubuko.com