Java基本数据类型
1、Java数据类型
2、Java基本数据类型所占位数、最小值、最大值
public class BasicDataTypeTest {
public static void main(String[] args) {
//byte
System.out.println(Byte.SIZE);//8位
System.out.println(Byte.MIN_VALUE);//-128
System.out.println(Byte.MAX_VALUE);//127
System.out.println(Byte.BYTES);//1字节
//short
System.out.println(Short.SIZE);//16
System.out.println(Short.MIN_VALUE);//-32768
System.out.println(Short.MAX_VALUE);//32767
//char
System.out.println(Character.SIZE);//16
System.out.println((int)Character.MIN_VALUE);//0
System.out.println((int)Character.MAX_VALUE);//65535
//int
System.out.println(Integer.SIZE);//32
System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648
//long
System.out.println(Long.SIZE);//64
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808
//float
System.out.println(Float.SIZE);//32
System.out.println(Float.MAX_VALUE);//3.4028235E38
System.out.println(Float.MIN_VALUE);//1.4E-45
//double
System.out.println(Double.SIZE);//64
System.out.println(Double.MIN_VALUE);//4.9E-324
System.out.println(Double.MAX_VALUE);//1.7976931348623157E308
//boolean 占1位,只有两个值,true和false,默认值是false
}
}
3、基本数据类型取值范围计算
3.1、整型
byte示例:
最高位为符号位
byte最大值:
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|
2^0+2^1+2^2+2^3+2^4+2^5+2^6+0*(-1)*(2^7)=127
byte最小值:
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|
1*(-1)*2^7=-128
其他整型的取值范围的计算方式同理。
3.2、浮点型
float示例:
float32位,最高位是符号位,中间8位是阶位,最后的23位是小数位。
float最大值:
最高位符号位0表示正数。阶码1111 1110才表示最大,全是1的时候是特殊值,阶码E=e+127=254,所以指数e=E-127=127。小数位23个1 。
所以最大值表示为:(1.1……1)2 x(2^127)10
其中前面是二进制,小数点后面有23个1,转化成10进制为 2-2(-23),所以最后的10进制值是(2-2(-23))x 2^127。
其他的就不计算了,关于浮点数的表示方法,详情参见IEEE754标准。
4、基本数据类型的类型转化
byte→short→char→int→long→float→double
他们所能表示的范围依次递增,其中boolean无法转化成其他7个基本数据类型。虽然double和long都是64位,但是当long转化成double时可能存在精度丢失问题。因为整型和浮点型在存储时表示方式不一样,浮点型表示的值在某些范围里是跳跃的。当我们要进行的小数的计算时,常用的是BigDecimal而不是float和double。
从位数较少的基本数据类型转化成位数较大的基本数据类型的时候,自动隐式转化。反之,强制转化,有精度丢失,数据溢出的风险。
4.1、强制转化
public class TypeCastTest {
public static void main(String[] args) {
//大转小,存在精度丢失或者数据溢出风险
System.out.println((byte)128);//-128
System.out.println((byte)256);//0
}
}
4.2、自动隐式转化
public class TypeCastTest {
public static void main(String[] args) {
//在运算的时候,会自动隐式向表达式中精度最高的类型转化。
//如果这些数据类型是byte,short,char,会直接转化成int
byte b = 1;
int i = 128;
System.out.println(i+b);//129
//表达式中的整数,默认式int类型。
//如果这个整数的大小超过了int类型的范围,就会报错。
//此时在整数之后添加L表示其为long类型,L大小写均可。
long l=99999999999999999L;
System.out.println(i+b+l);//100000000000000128
//char到int的转化是自动隐式转化
char c = '1';
//char转化成int,对应的是ASCII码表
System.out.println(i+c);//177
i = c;
System.out.println(i);//49
double d = 12.77;
//小数默认式double类型,如果是float类型,需要在小数之后加上f,f大小写均可
float f = 1.1F;
System.out.println(i+b+l+f+d);//9.999999843067496E16
//long类型转化成double可能存在精度丢失
double dl=l;
System.out.println(dl);//1.0E17
double dls= Double.valueOf(String.valueOf(l)).doubleValue();
System.out.println(dls);//1.0E17 依旧精度丢失
}
}
5、基本数据类型比较是否相等
直接用 == 判断
public class CompareTest {
public static void main(String[] args) {
int i1 = 1;
int i2 = 1;
System.out.println(i1==i2);//true
System.out.println(i1==1);//true
byte b1 = 1;
System.out.println(i1==b1);//true
char c= '1';
System.out.println(i1==c);//false
}
}
boolean值一般用在条件判断中。