逻辑运算符
&(逻辑与)|(逻辑或)^(逻辑异或)
& 与 && 的区别:
1)最终结果是一样的
2)&&具有短路效果,左边是false,右边就不在执行
| 与 || 的区别:
1)最终的效果是是一致的;
2)||具有短路效果,左边为true,右边不执行
位运算符
- &(位与):有0则0
- |(位或) :有1则1
- ^(位异或):相同为0,不同为1
- ~(按位取反)
system.out.println(~6);//6的反码 -7
00000000 00000000 00000000 00000110 //6的原码、反码、补码都是它本身
11111111 11111111 11111111 11111001 //对6取反(-7的补码)补码参与的运算,运算的结果是补码
11111111 11111111 11111111 11111000 //减一 (-7的反码)
10000000 00000000 00000000 00000111 //取反(-7的原码)
四个位运算符特点: 一个数据对另一个数据位异或两次,该数本身不变;
/*面试题:实现两个整数变量的交换(不使用临时变量)*/
//不需要第三方变量,有弊端,有可能超出int的取值范围
int x=5;
int y=10;
x = x + y;
y = x - y;
x = x - y;
//第二种:不需要第三方变量
x = x ^ y; // 5 ^ 10
y = x ^ y; //即5 ^ 10 ^ 10 = 5
x = x ^ y; //5 ^ 10 ^ 5 =10
- << (左移)左边最高位丢弃,右边补齐0,向左移动几位就是乘以2的几次幂
- >> (右移) 最高位是0,左边补齐0,最高位是1,左边补齐1,向左移动几位就是除以2的几次幂
- >>> (无符号右移) 无论最高位是0还是1,左边都补齐0
/*面试题:最有效率的算出 2*8的结果*/
System.out.println(2 << 3); //2 * 2^3
三元运算符
(关系表达式)?表达式1 :表达式2
/*1.比较两个整数是否相同*/
int x = 10;
int y = 5;
// boolean b = (x == y) ? true : false;
boolean b = (x == y);
/*2.获取三个整数中id最大值*/
int x = 10;
int y = 20;
int z = 30;
//先比较任意两个数的值,找出最大值
int temp = (x > y) ? x : y;
//用前两个数的最大值与第三个数比较,获取最大值
int max = (temp > z) ? temp : z;
使用键盘录入数据
1.导包:import java.util.Scanner;
2.创建对象:Scanner sc = new Scanner(System.in);
3.获取数据:int x = nextInt();//录入整数
流程控制语句
- 分类
- 顺序结构
- 选择结构 :if / switch
- 循环结构 :for / while /do…while
- 选择结构if语句注意事项
- if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略;
//只有一条语句,没有大括号,则if包含的是离它最近的一条语句
int age = 19;
if(age > 18)
int x =10; //此处执行出错,int x =10;包含两个语句,int x声明是一句,x = 10 赋值是一句
//所以最好加上大括号
System.out.println("完了");
- 一般来说,有左大括号就没有分号,有分号就没有左大括号(对for/while同样是这样)
int age = 19;
if(age > 18);{//分号即代表判断结束,所以if并没有包含int x = 10;这条语句
int x = 10;
}
- if语句和三元运算符的相互转换
- 三元运算符实现的,都可以采用if语句实现,反之不成立;
- 能用三元运算的尽量用三元运算;
- 什么时候if语句实现不能用三元进行改进呢?
- 当if语句控制的操作是一个输出语句的时候就不能;
- 因为,三元运算符是一个运算符,运算完毕后应该有一个结果,而不是一个输出;
- 选择结构switch语句格式
int x = 10;
switch(表达式) { // 基本数据类型可以接收byte/short/char/int(能自动提升为int型) **long类型的不可以**
case 值1: //引用数据类型可以接收枚举(JDK1.5) String字符串(JDK1.7)
语句体1;
break;
case 值2 :
语句体2;
break;
...
default :
语句体n;
break;
}
- 选择结构switch语句的注意事项
- default可以省略吗?可以,但是不建议省略,因为它的作用是对不正确的情况给出提示;
- break可以省略吗?最后一个可以省略,其他不能省略,否则会出现case穿透现象,建议都不省略;
- default一定要放在最后吗?不是,可以在任意位置,但是建议在最后;
- switch语句的结束条件:1)遇到break结束; 2)执行到switch右大括号;
/*case穿透*/
int x = 1;
switch(x){
case 1:
System.out.println("1.......");
// break; 注释掉出现穿透现象
case 2 :
System.out.println("2......");
break;
}
/*执行结果*/
1......
2.....
/*看程序执行结果*/
int x = 2 ;
int y = 3;
swtich(x) { //先判断case发现都不满足,则执行default
default : //执行完default(y = 4),没有遇到break,则不用判断case,直接往后执行
y++; //所以y = 5;又没遇到break,跳过case的判断,往后执行,所以y = 6;
case 3:
y++;
case 4:
y++;
}
System.out.println(y);//y = 6;
- switch语句和if语句的区别
- switch建议判断固定值的时候使用
- if 建议判断区间或范围的时候使用