一、类型转换:
自动类型转换: (向上转换-类型的提升)
- 就把范围小的赋值给范围大的。虚拟机会自动完成类型转换,而不会出现任何的精度丢失。
- byte —>short—>int—>long—>float—>double–从左到右(从小到大)可以自动转换
char—>int - byte <—>char不能进行自动的类型转换 //因为char的取值范围都大于0
- short<—>char不能进行自动的类型转换
- byte —>short—>int—>long—>float—>double–从左到右(从小到大)可以自动转换
强制类型转换:向下转换
- 把范围大的赋值给范围小的。编译器会报错误。需要程序员手动进行强制类型转换。
- (要去的类型)数据
- boolean类型无法和任何的其他类型进行类型转换。
int i3 = 128;//0000 0000 1000 000
System.out.println((byte)i3);//1000 0000 输出-128(求原码:存的补码-1再取反)
- 当参与运算的都是byte、short或char的时候,会自动先把这三种类型自动提升成int,然后再运算。
- 复合运算符隐藏强制类型转换。
byte b1 = 20;
byte b2 = 30;
byte b3 = b1 + b2; //报错
//byte b3 = byte(b1 + b2) 需要强制转换
int i1 = 6;
double d1 = 4.6;
System.out.println(i1 + d1);//结果为10.6,会自动提升
byte b1 = 10;
b1 = b1 + 1;//编译报错
b1 += 1; //b1 = (byte)(b1+1) 复合运算符会自动转换
二、位运算符:
- & 按位与。有一个是0这一位就是0
3 011
4 100
------------
000
- 判断奇偶最快的方式
01000100010x
000000000001
--------------------
x
x=0,则为偶数
System.out.println(9 & 1); //和1按位与
- | 按位或。有一个是1这一位就是1
- ^按位异或。相同是0,不同是1
- a ^ a = 0; a ^ 0 = a;
- 一个数和本身按位异或等于0;一个数和0按位异或等于这个数本身
//有两个数a和b,交换a和b的值
int a = 10;
int b = 20;
/*
int c = a ;
a = b;
b = c;
a = a + b;
b = a - b;
a = a - b;
*/
a = a ^ b;
b = a ^ b; //b = a ^ b ^ b = a(原来的a)
a = a ^ b; //a = a ^ b (原来的a和b)^ a(现在的b,就是原来的a) = b
- ~ 按位取反 0变1,1变0,注意符号位也会取反 。——//负数原码取反,符号位不变。
##移位运算符: - << 左移 ,每一位向左移动指定的位数,低位用0补齐。每移动一位,相当于*2,结果相当于原来的数乘以2的移位次方。
- a << b,java中先对b进行32取余%得到c,然后a << c。 a<<33相当于a<<1
(byte)-1 << 33 //先转换为int型再左移,只能左移int ,double型
//计算2 的15次方 最快的方法
1 << 15
- ‘>>’ 带符号右移 ,高位用符号位补:正数用0补,负数用1补。右移一位相当于 / 2。
- ‘>>>’ 无符号右移 ,高位都是用0补齐。负数无符号右移变成正数。
三、三元运算符
- 值 = 表达式1 ? 表达式2: 表达式3
- 表达式1:必须是boolean表达式 true false
如果表达式1是true,那么最终的值是表达式2的值,否则就是表达式3的值。 - 表达式2:
- 表达式1:必须是boolean表达式 true false
四、选择结构
4.1 if结构
- 4.1.1 if(布尔表达式){
//代码
} - 4.1.2 if(布尔表达式){
//true执行
}else{
// false执行
} 4.1.3 if(布尔表达式){
}else if(布尔表达式){
}….else if(){}
4.1.4 if(布尔表达式){
}else if(布尔表达式){
}….else if(){
}else{
}- 注意布尔旗标法的用法 判断质数合数的例子
- 4.1.1 if(布尔表达式){
- 4.2 switch结构
switch(表达式){
case 常量1:
//代码
case 常量2:
//代码
}
- 1.一旦case匹配就开始执行代码,直到switch内的代码执行完毕或者碰到break语句
- 2.所以再实际开发中,一般每个case后面都添加一个break;
- 3.switch支持哪些类型:byte、short、int、char、enum(枚举)、String(jdk1.7新增)。
注意long、float、double、boolean是不支持的。
int a = 3;
int b = 3; //如果是final int b = 3 则case b:就ok
switch(a){
case 5:
case b:
}