一、基本类型介绍
关键字 | 数据类型 | 占用字节数 | 取值范围 | 默认值 |
byte | 字节型 | 1个字节 | -128~127 | 0 |
char | 字符型 | 2个字节 | Unicode0~Unicode215-1 | u0000 |
short | 短整型 | 2个字节 | -215~215-1 | 0 |
int | 整型 | 4个字节 | -231~231-1 | 0 |
long | 长整型 | 8个字节 | -263~263-1 | 0 |
float | 单精度浮点数 | 4个字节 | -2128~2128 | 0.0 |
double | 双精度浮点数 | 8个字节 | -21024~21024 | 0.0 |
boolean | 布尔型 | 1个字节 | true|false | false |
范围
float: 1bit(符号位) 8bit(指数位) 23bit(尾数为)
double: 1bit(符号位) 11bit(指数位) 52bit(尾数为)
float的指数范围 -127~128,而double的指数范围-1023~1024
float的范围为-2128~2128,也即-3.40E+38 ~ +3.40E+38;double的范围为-21024~21024,也即-1.79E+308 ~ +1.79E+308
精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:223 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:252 = 4503599627370496,一共16位,同理,double的精度为15~16位。
基本类型赋值
byte:
byte b=1;
byte a=1+2;
short
short s=1;
char
char a='A'; //直接用字符赋值 char b=65; //用10进制数字赋值 char c='u0041'; //使用unicode码赋值 char d=0x0041; //使用16进制赋值 char e=0101; //使用8进制赋值 System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e);
上面输出的都是是字符'A'
int
int a=3;
long
long a=1; long b=10000000000l; //如果赋值范围超过了int,就必须在后面加上字母l或者L
float
float a=1.2f;
double
double a=1.2;
二、基本类型运算
1、java中byte、short和char类型运算操作首先会把这些值转换成int类型,然后对这些int值进行运算,返回int类型。
byte a=1; byte b=2; byte c=a+b; 这里先将a和b转换成int类型在进行计算,结果返回int类型,所以这里结果不正确 可以改为: int c=a+b; 或者 byte c=(byte)(a+b); 当然这里不能操作byte范围
byte a=1; char b='B'; int c=a+b; System.out.println(c);
输出为67 现将a=1和b='B'转换成int型 a=1、b=66 所以结果为67
2、在做除法运算时,如果两边除数和被除数都是整数,其结果也为整数(只保留整数部分)例如:
int a=10; int b=3; System.out.println(a/b);
结果为:3
3、在做除服运算时,两个操作数其中有一个是浮点数,计算结果也是浮点数。而且允许除数是0或者0.0,得到结果正无穷或负无穷
double a=5; int b=5; System.out.println(a/0); //结果为正无穷:Infinity System.out.println(-a/0); //结果为负无穷:-Infinity System.out.println(b/0); //抛出异常:java.lang.ArithmeticException: / by zero System.out.println(0/0.0); //结果为:NaN System.out.println(0.0/0); //结果为NaN