(一)基本数据类型
1.整数型
首位为符号位,后面是数字位,符号位为0表示正数,后面数字位直接二进制转化为10进制;符号位1为负,把后面所有的位数取反(即0,1互换),再转化为10进制后加1,就得到该负数的绝对值。
整型 |
字节 |
最大存储数据 |
存放的数据范围 |
Byte |
1(8bit) |
28-1 |
-27~27-1 |
Short |
2(16bit) |
216-1 |
-215~215-1 |
Int |
4(32bit) |
232-1 |
-231~231-1 |
long |
8(64bit) |
264-1 |
-263~263-1 |
整型中默认类型是int型,有以下表达方式:
十进制: 语法→0~9之间的数字,如int x=123;
8进制 : 语法→加前缀0,如int x=0123;
16进制:语法→加前缀0x或0X;如int x=0x123;
注:长整型数字需加后缀L或者l,如long x=9876543210L;
2.浮点型
首位为符号位,中间是指数位e,表示2的阶乘,后面是尾数位m(0<=m<1),指数位的首位是指数符号位,
数字表示:(1+m)*2e
浮点型 |
字节 |
数据范围 |
备注 |
Float-单精度 |
4(32bit) |
3.4e-45 ~ 1.4e38 (-2128~2128) |
直接赋值需在最后加f或者F |
Double-双精度 |
8(64bit) |
4.9e-324 ~ 1.8e308 (-21024 ~21024 ) |
直接赋值可以在最后加d或者D,也可不加 |
符号位 |
指数位e |
尾数位m (0<m<=1) |
||||
0/1 |
符号位(首位) |
剩余位 |
2-1 |
2-2 |
2-3 |
…… |
Float |
1位 |
7位 |
23 |
|||
double |
1位 |
10位 |
52 |
浮点型默认类型是double型。浮点型有2种写法:
小数型:如1.2
指数型:语法→数字A e(或E) 数字B,表示数字A乘以10的数字B次方,如2e3→2*103=2000; -3e-2→-3*10-2=-0.03
注:强制表示单精度浮点型,在数字后面加后缀f或者F,强制表示双精度浮点型,在数字后加后缀d或者D。
3.字符型
char →单引号引用的单个Unicode码字符或者16bit非负整数;占两个字节,表示一个字符,写法有两种:
数字式:0~216-1之间的整数
字母式:单引号引用的1个字符,可以是任何字符,包括标点符号、数字、大小写英文字母、日文、汉字等,是Unicode编号
字母式写法中单引号引用的内容中,还有以下写法:
字符:如'a'
8进制: 语法→'\ddd',如'\123'
16进制:语法:‘\uhhhh', 如'\u9646'
部分特殊字符,'\字母',如'\t'表示缩进符,'\n' 表示换行符, '\r'表示回车符
4.布尔型(逻辑型)
boolean,只有两个值,true/false,或者逻辑表达式,不能用0,1表示,也不是“true”字符串
数据值域补充说明:
1.一个bit是计算机存储的最小数据单位,即1位,只可能是0或者1;
2.一个byte由8个bit组成,即8位,可以表示256个整数值,又由于byte在java中有符号之分(正负数),所以范围是-128~127;
3.一个char在java中有两个byte组成,用来表示一个字符,即unicode编码,是无符号类型;
4.int和float在java中由4个byte组成;
5.每个long或者double型变量占用8个byte的存储空间;
6.1T=1024G, 1G=1024M, 1M=1024K, 1K=1024B;
(二)引用数据类型
所有用class,interface,abstract 定义的类;
String也是java定义的一个类,其数据存储方式与基本数据类型一样,但是String不是基本数据类型;基本数据类型也不是类;
(三)数据类型的转换
源类型与目标类型要兼容,比如数字和字符串类型之间就不能转换。数据转换分为自动转换和强制转换:
自动转换:从小范围类型的字面量转为大范围类型,如byte,short→int→long,float→double;
强制转换:语法→(类型) 表达式,可以进行大范围类型的字面量,转为小范围类型。整数的强制转换时通过截取保留最后长度的方式进行,所以容易出现正数强制转换后变成负数的可能。(浮点型强制转整型,实际是先转为int型)
表达式类型提升规则:byte→short→int→long→float→double
例:
int x=10;
short y=(short)x; // 强制转换
System.out.println(y)
short a=10;
int b=a; //自动转换
System.out.println(b);
int c=400;
byte d=(byte)c; //强制转换后正数转换为了负数,此处输出结果d=-112
System.out.println(d);