首页 > 代码库 > Java基本类型与类型转换咋就这么烦?
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;//不报错,发生了窄化操作的自动转换,值为3276735 short st5 = (short)(1024 * 32);//不报错,发生了窄化操作的强制转换,值为-3276836 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 }