1. 基本数据类型:(四类八种)
整型:以补码类型表示
byte:一个字节(-128~127,默认值是0)
short:二个字节(-215~215-1,默认值是0)
int:四个字节(-231~231-1,默认值是0)
long:八个字节(-263~263-1,默认值是0L)
浮点型:(Java中所有的小数都是不精准的,约等于,金融等精确方面不适用)
float:四个字节
float a = 0.1f;
double:八个字节long b = 0.1;
布尔型:boolean (true、false,布尔值不能转其他基本类型)
字符型:('w'和"w"是两种不同的类型)
char: (16 位 Unicode 字符,\u0000~\uffff)
char a ='w'; System.out.println(a); //w System.out.println(String.valueOf(a)); //w,但是是字符串类型 System.out.println(a+""); //w,但是是字符串类型 System.out.println((int)a); //119 ASCII码
注:
- java中整型默认int,加L变long int c =11111111111; ---->long c=11111111111L;
- 整型默认10进制,0开头代表八进制,0x开头代表十六进制
- 小数默认double类型,为了节省空间通常使用float,float a = 0.1f
二进制:
1. 原码:除2取余,逆序排列(从下到上),正数最高位为0,负数为1
2. 反码:正数不变(依然是源码),负数取反(符号位不变)
缺点:有+0 -0需要判断0000 0000,1111,1111 ;进位溢出问题
3. 补码:正数不变(依然是源码),负数补码+1
39+(-71) -71原码:1100 0111 -71反码:1011 1000 -71补码:1011 1001 39补码:0010 0111 39-71:1011 1001 --->1110 0000 --->1101 1111 --->1010 0000
考:
存在使i + 1 < i的数吗?
存在, byte 127+1(溢出)
2. 引用数据类型:
引用类型指向一个对象,指向对象的变量是引用变量。类似于C语言当中的指针。
引用数据类型大小为4个字节。
- 对象、数组都是引用数据类型。
数组:int [] a=new int []{1,2,3,4,5};
对象:Student s1 = new Student();
- 所有引用类型的默认值都是null。
变量一旦声明后,类型就不能被改变了。
3. 数据类型转换
- 显式转换(datetype)变量
注意前后大小问题,是否超出转换范围 。
大转小:实际数据内容是否超出精度,超出后会溢出造成数据丢失 。
小转大:范围扩大,没什么影响 。
- 隐式转换(能不用就不用)
普通运算时,小转大自动转 byte a + int b 自动int结果也是int(byte,short,char最少转到int)
所有整数和浮点运算,自动转浮点
考:byte a =1; short b =1; b=b + a; //报错
- 转换示意图
蓝色虚线代表可能造成数据丢失的类型转换。
红色实线代表无数据丢失的自动类型转换。