1、Java中基本数据类型包括:整型(byte、short、int、long)、字符型(char)、布尔型(boolean)、浮点型(float、double)三种类型。
2、所占内存分别为:byte:1Byte;short:2Byte;int:4Byte;long:8Byte;char:2Byte;boolean:1Byte;float:4Byte;double:8Byte;
3、表示数的范围byte:[-128~127];short:[-32768~32767];int:[-2147483648~2147483647];long:[-9223372036854774808~9223372036854774807];
float:[3.402823e+38 ~ 1.401298e-45];double:[1.797693e+308~ 4.9000000e-324];
表示范围的计算:
例如byte类型:
00000_0000~0111_1111:表示0~127;
10000_0000~1111_1111:表示-128~-1;
10000_0000 为-0;规定-0 = -128;
4、在Java中所有的整型数据默认都为int类型,浮点型默认为double;其它类型byte、short会隐式转换(若不超出表示范围);eg.:
1 byte b = 10; //隐式转换
2 short s = 10; //隐式转换
3 int i = 10;4 long l = 10L; //需要L或l注明
5 float f = 10F; //需要F或f注明
6 double d = 10;
5、扩展转换,扩展转换不必要进行显示的类型转换,因为目标类型足够容纳当前类型不会丢失信息。
eg.:
byte b = 10; //隐式转换
short s = 10; //隐式转换
int i = 10;long l = 10L; //需要L或l注明
float f = 10F; //需要F或f注明
double d = 10;//扩展转换
short bUp =b;int sUp =s;long iUp =i;float lUp =l;double dUp =f;char ch = '1';int chUp = ch-48;
6、强制类型转换,将容纳更多信息的数据类型转换成一个容量更小的数据类型,可能存在精度损失的风险,编译器要求程序员进行强制类型转换;
eg.
int age = 10;short ageDown = (short)age;//强制类型转换不会丢失信息
System.out.println(ageDown);int width = 130;byte widthDown = (byte)width;//强制类型转换会丢失信息
System.out.println(widthDown);
输出:
10
-126
float average = 10.5f;int averageDown = (int)average;
System.out.println(averageDown);
输出:
10
由于with = 130超出byte数据类型的表示范围,所以编译器会进行高位截断:
130 原码:0000_0000_0000_0000_0000_0000_1000_0010 ;
补码:0000_0000_0000_0000_0000_0000_1000_0010 ;
将130的补码截取低八位:1000_0010 ;
1000_0010 ;为补码形式最高位为符号位,可见结果是一个负数,减一取反求得原码为:1111_1110;
所以输出为-126。
而浮点数直接截断小数部分。
通常表达式中的最大的数据类型结果决定了该表达式的数据类型。
7、练习题:
一、二会通过编译?
/*** 一:*/
short s1 = 1;
s1= s1 + 1;
/*** 二:*/
short s1 = 1;
s1+= 1;
答案:二
因为在Java中所有整型数据默认都为int型 s1 = s1 + 1; 1为int型需要强制装换;而 s1 += 1; 编译器会进行隐式的类型转换。
写的第一篇文章写得好方/(ㄒoㄒ)/~~。。。。。