1.位运算符(是二进制运算符)
1按位与运算 & a&b 将a和b转成二进制,上下比较,右侧对齐。上下都为1,结果才为1,其余时结果都是0
int result = 12&3;
System.out.println(result); 结果为0
result = 12&11;
System.out.println(result); 结果为8
2按位或运算 | a|b 将a和b转化成二进制,两者有一个为1,结果就为1
result = 12|11;
System.out.println(result); 结果为15
3按位异或运算 ^ a^b 转化成二进制,a和b不同则为1,相同则为0;
result = 12^11;
System.out.println(result); 结果为7
4反码运算 ~ ~a 将二进制中的0换成1,1换成0,再取反码+1
result=~11;
System.out.println(result); 结果为-12
5移位运算 << a<<b a向左移动b位 右侧补0
6 >> a>>b a向右移动b位 左侧补符号位(0或1)
7 >>> a>>>b a向右移动b位 左侧补0
result=1<<2;
System.out.println(result);结果为4
result=-1>>2;
System.out.println(result);结果为-1
result=-1>>>1;
System.out.println(Integer.MAX_VALUE);
System.out.println(result);
按位与 & 按位或 | 也可以对布尔值进行运算,得到布尔值
boolean bool = true & false; & 和 &&的运行结果是一样的
int num1=12; int num2=12;
bool=num1++<12&num2++>12; &没有短路现象,必须计算完毕
bool=num1++<12&&num2++>12; &&有短路现象
第三变量法交换值:
int a=10;
int b=20;
int temp=a;
a=b;
b=temp; 20 10
System.out.println(a+"==="+b);
总和交换法:
a=10;b=20;
a=a+b;
b=a-b;
a=a-b; 20 10
System.out.println(a+"---"+b);
异或运算交换法:
a=10;b=20;
a=a^b;
b=a^b;
a=a^b; 20 10
System.out.println(a+"---"+b);
2.计算3*16最快的方式:3<<4,向左移几位就是乘2的几次方。
3. 赋值运算符 = += -= *= /= %= (赋值运算优先级是最低的)
byte a=12;
a+=2;
a=(byte)(a+2);注意此时a+=2和a=a+2不一样,在byte类型下需要对a=a+2进行强制类型转换
运算符优先级:
4. 三元运算符 a?b:c 此处为出笔试题最常见的一种形式
int result=12>23?11:33;
System.out.println(result); 输出33
System.out.println(true?11:33); 输出11
result=12.2!=33.99?'a':90;
System.out.println(result); 输出97(即为'a')
System.out.println(true?3:4.0); 输出3.0 在各类运算符的运算中,只要有double类型参与,得到的结果一定是double
流程控制(if...else if... while do...while for break continue)
5. if...else if...语句:
int score = 87;
if(score>=60){
System.out.println("成绩及格");
}else if(score>=80){
System.out.println("成绩优秀");
}else{
System.out.println("成绩不及格");
}
6. switch 匹配某一个变量的值,如果匹配到某一个case项,就从这个case开始运行。
运行到break或是程序结束
所有的case项都没有匹配成功才会执行default
1.case项和default的顺序可以打乱,但是其执行顺序不会乱(先匹配case,未匹配到再执行default)
2.switch可以匹配的类型:byte short int char String Enum(枚举) 不可以匹配的类型 long float double boolean
int num = 2;
switch (num){
case 1:
System.out.println("春");
break;
case 2:
System.out.println("夏");
break;
case 3:
System.out.println("秋");
break;
case 4:
System.out.println("冬");
break;
default:
System.out.println("未找到匹配项");
break;
}
7. while循环
int i=0;
while(i<5) 小括号内的为while循环的条件判断
{
System.out.println("a"); 大括号内为while循环的循环体
i++;
}
8. do...while循环 先做一遍,然后进行判断
int i=1;
do{
System.out.println("do"); 大括号内为do...while的循环体,最少会执行一遍
}while (i>20); 小括号内是do...while的条件判断
9. for循环
初始值;条件判断;对值的操作
for (int j=0;j<10;j++){
System.out.println("这是第"+i+"次循环"); 大括号内为循环体
}
10. break结束当前所在的循环体
for (int a=1;a<10;a++){
if (a%7==0){
break;
} System.out.println(a);
}
break 跳出多重循环
a:for (;;){
for (;;){
for (int i=1;i<=100;i++){
if (i==50){
break a; 这里直接跳出a循环,上面a:是给循环起名字
}
}
}
}
利用锁跳出多重循环
boolean bool=true; 定义并初始化锁变量
a:for (;bool&true;){
for (;bool&true;){
for (int i=1;i<=100;i++){
if (i==50){
bool=false; 利用锁变量,使bool变成false,直接跳出多重循环
}
}
}
}
11. continue停止此次循环,直接执行下一次循环
12. 死循环 没有结束循环的条件 死循环下面不能再写其他代码
while (true){ }
无限循环 永远达不到结束循环的条件(有结束循环的条件,但是永远达不到) 无限循环可以接着写其他代码
int num=1;
while (num<1000){num--;}
13. 数组
int[] arr={1,2,3,4}; 动态实例化
int[] arrB=new int[]{1,2,3,4,5}; 动态实例化
int[] arrA=new int[4]; 静态实例化
14. 数组的限定!!!!!!!!(对于任何数组来说,这两条限定条件都必须满足)
1.数组只能存放指定类型的数据
2.数组的长度是不可变的
15. 使用数组中的元素 下标从0开始依次增加 0 1 2 3 4... ...
System.out.println(arr[3]);
System.out.println(arr); 直接打印只会打印出数组arr所在的地址
System.out.println(Arrays.toString(arr)); 利用工具类Arrays.toString()才可以打印出数组
arr[0]=99; 可以直接改变数组某一项的值
System.out.println(arr.length); 输出数组的长度
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]); 利用for循环一项一项输出数组的各项值
}
16. 二维数组
int[][] arrs=new int[4][2]; 定义二维数组的方式
arrs[0][1]=12;
System.out.println(Arrays.deepToString(arrs)); [[0, 12], [0, 0], [0, 0], [0, 0]]
二维数组的限定
二维数组中的一维数组的个数不可变
arrs[2]=new int[]{1,1,2,2,3,3}; 将第三项变为[1,1,2,2,3,3]
System.out.println(Arrays.deepToString(arrs));
[[0, 12], [0, 0], [1, 1, 2, 2, 3, 3], [0, 0]]
二维数组的小练习(求随机数组成的二维数组的各元素之和)