Java基础
1、八种基本数据类型
1.1、整数类型
- byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
- short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
- int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1
- long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
1.2、浮点数类型
- float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
- double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
1.3、字符类型
- char:16位,存储Unicode码,用单引号赋值。
1.4、布尔类型
- boolean:只有true和false两个取值。
2、Java不同数据类型之间的运算
2.1自动类型转换(低-高)
数据类型转换必须满足如下规则:
1、不能对boolean类型进行类型转换。
2、不能把对象类型转换成不相关类的对象。
3、在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
数据类型容量大小关系:
- byte short char > int > long > float > double
- byte short char之间不能互相转换
分析:byte
类型参与运算,首先会转换为int
类型;当int 、 long 、 float 、 double三种数据类型混合运算时,得到的返回值类型将根据容量取最大值
2.2强制类型转换(高-低)
- 强制类型转换需注意内存溢出问题,例如下面代码:
int i = 200;
byte b = (byte) i;
System.out.println(b);//运行结果为-56
- 此时int类型的i将内存中的值存入b,由于b类型为byte无法储存如此“庞大”的数值则会出现内存溢出的情况
- 强制类型转换还需注意精度丢失问题,例如下面代码:
double pi =3.1415926535;
float i = (float)pi;
System.out.println(i);//运行结果为3.1415927
- 此时double类型的pi将内存中的值存入i,由于i类型为float是单精度,比double类型精度要小,所以会造成精度丢失的情况
3、Java运算符
- java中位运算符主要有:按位与&、按位或|、按位非~、按位异或^。
- 在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示。
非位运算值表
A | ~A |
1 | 0 |
0 | 1 |
与位运算值表
A | B | A&B |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
或位运算值表
A | B | A | B |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
异或位运算值表
A | B | A&B |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
移位运算符
移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。
运算符 | 含义 | 例子 |
<< | 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) | x<<3 |
>> | "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. | x>>3 |
>>> | "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0. | x>>>3 |
例如:
System.out.println(16>>3);//2
System.out.println(16/2/2/2);//2
System.out.println(50<<5);//1600
System.out.println(50*2*2*2*2*2);//1600
System.out.println(16>>>3);//2
结论:
1、左移运算符相当于做乘法,左移几位则乘几个2
2、右移运算符相当于做除法,右移几位则除以几个2