八种基本数据类型:
整型(Int)、短整型(short)、长整型(long)、单精度浮点型(float)、双精度浮点型(double)、布尔型(boolean)、字符型(char)、字节型(byte)
取指范围:
int:-231——231-1
short:-215——215-1
long:-215——215-1
byte:-27——27-1
char:-27——27-1
float:-3.40E+38 ~ +3.40E+38(4字节=1符号位+8位阶数+24位尾数)
double:-1.79E+308 ~ +1.79E+308(8字节=1符号位+11位阶数+52位尾数)
boolean:ture、false
类型转换:
boolean类型不能与其他类型转换,否则会报错。
byte类型不能自动提升到char,char类型也不可以自动提升到short类型(因为负数问题)
当对小于int的数据类型(byte, char, short)进行运算时,首先会把这些类型的变量值强制转为int类型进行计算,最后会得到int类型的值。因此,如果把2个short类型的值相加,最后得到的结果是int类型,如果需要得到short类型的结果,就必须显示地运算结果转为short类型。
几种边界值及溢出:
int类型的边界最大值为2147483647,加1变成-2147483648,乘2变成-2
int a = Integer.MAX_VALUE;
System.out.println(a+1);
System.out.println(a*2);
/运行结果为
-2147483648
-2
/原理
-2147483647 原码1111 1111 1111 1111 1111 1111 1111 1111
-2147483647 补码1000 0000 0000 0000 0000 0000 0000 0001
-2147483647 补码1000 0000 0000 0000 0000 0000 0000 0001
-1 补码1111 1111 1111 1111 1111 1111 1111 1111
得到-2147483648 补码1000 0000 0000 0000 0000 0000 0000 0000
-2147483648-1得到2147483647;
-2147483648 补码1000 0000 0000 0000 0000 0000 0000 0000
-1 补码1111 1111 1111 1111 1111 1111 1111 1111
得到 补码0111 1111 1111 1111 1111 1111 1111 1111
正好是2147483647 最大值
最小值为-2147483648,减一变成2147483647,乘2变成0
int a = Integer.MIN_VALUE;
System.out.println(a-1);
System.out.println(a*2);
/运行结果为
2147483647
0
short类型、long类型与int类似。
(32767,-32768)
(9223372036854775807,-9223372036854775808)
short a = Short.MAX_VALUE;
short b = Short.MIN_VALUE;
System.out.println(a);
System.out.println((short)(a+1));
System.out.println((short)(a*2));
System.out.println((short)b);
System.out.println((short)(b-1));
System.out.println((short)(b*2));
/结果为
32767
-32768
-2
-32768
32767
0
char类型最大最小值都为空,转为Int为65535
char a = Character.MAX_VALUE;
char b = Character.MIN_VALUE;
System.out.println(a);
System.out.println(a+1);
System.out.println(a*2);
System.out.println((char)(b));
System.out.println((char)(b-1));
System.out.println((char)(b*2));
/结果为
65536
131070
float型和double型
//double a = Double.MAX_VALUE;
//double b = Double.MIN_VALUE;
float a = Float.MAX_VALUE;
float b = Float.MIN_VALUE;
System.out.println(a);
System.out.println(a+1f);
System.out.println(a*2);
System.out.println(b);
System.out.println(b-1);
System.out.println(b*2);
/float值为
3.4028235E38
3.4028235E38
Infinity
1.4E-45
-1.0
2.8E-45
/double值为
1.7976931348623157E308
1.7976931348623157E308
Infinity
4.9E-324
-1.0
1.0E-323