java中数据类型有:
- 基本数据类型
- 引用数据类型
计算机中最小的存储单位是byte,1 byte = 8 bit(1字节等于8个二进制位)
基本数据类型(四大类八小种):
整数型:
- (1个字节)byte [-128~127]
- (2个字节)short [-32768~32767]
- (4个字节)int [-2147483648~2147483647]
- (8个字节)long (数字后面要加上"L"或"l")
浮点型:
- (4个字节)float (数字后面要加上"F"或"f")
- (8个字节)double
布尔型:
- (1个字节)boolean
字符型:
- (2个字节)char [0~65535]
char中只能存放一个字符(汉字、字母、数字等只能存一个)
char与short容量是一样的,但是char表述文字没有负数,所以可以表示更大的数字。float最然只有4字节但是容量比long大,浮点型比整数型要大。
字符编码是规定了文字所对应的一些列二进制码的字典,编码和解码时必须使用同一种字符编码不然会乱码。最开始是ASCII码,又制定了ISO-8899-1编码,后来才制定出了简体中文编码,容量从小到大(GB2312,GBK,GB18030)。繁体中文为Big5,再后来有unicode(utf-8,utf-16,utf-32).这样就方便了计算机的表示和转换。
当不同的数据类型进行运算时,会有类型转换(除了boolean类型以为的7种都可以)。
类型转换:
- 自动类型转换:容量由小转大,可以自动转换
- 强制类型转换:容量由大转小,需要加上强制转换的类型,不然编译会报错。(int a = (int)1L;)强制类型转换可能会造成精度的损失。数据是以补码的形式存储的,强制转换后再转换到源码时可能有很大的变化。
在运算中short、char、byte参加混合运算时会转换成int类型来做运算。整数型数据一般默认为int类型,浮点型数据一般默认为double类型。当直接将数据赋值给short、char、byte的时候,如果数据大小没有超出其容量大小时,无需强转直接赋值。(byte a = 1;)直接赋值给char时会转换成对应的字符。
int a = 1;
//byte b = a; 编译时会报错,系统编译时只能识别到a是int类型的,并不知道所存储的数据大小。
byte b = (byte)a; //会显示精度损失的错误,需要进行强转。
byte c = 2; //运算时也是一样的。
byte d = byte(b + c);
多种数据一起运算时,会自动类型转换成大的数据类型。