1. 负数在Java内存中存储机制:
a) 在内存中存储负数是使用补码的方式存储
b) 补码 = 原码的绝对值取反码+1
c) int i = 129;
byte b = (byte)i;
System.out.println(b);//结果为-127
2. 算数运算符:
a) 加号(+) : 加法, 表示正数, 字符串链接
b) 减号(-) : 减法, 表示负数
c) 乘号(*) : 乘法
d) 除法(/) : 除法
e) 取模(%) : 取模运算/求余数
f) 自增(++) : 让操作数+1
g) 自减(--) : 让操作数-1
3. 自增的原理 :
a) int i = 0; i = i ++;
其中的i = i++; 相当于
int temp = i;
i++;
i = temp;
4. (byte, char, short)在使用+=等运算符的时候, 编译器不会将其类型转换到int类型
5. 逻辑运算符:
a) 逻辑与(&, &&) : 当逻辑与两边的表达式都为true时才为true, 其他情况都为false, 双目逻辑与在使用的时候要注意, 当前面的表达为false的时候, 后面的表达式将不会去判断, 所以当前面的表达式为false的时候, 双目逻辑与效率会提高
b) 逻辑或(|, ||) : 当逻辑或两边的表达式有一个或都为true的时候为true, 其他情况为false, 双目逻辑或在前面的表达式为true的时候不会执行后面的表达式
c) 异或(^) : 当两边的表达式一个为true一个为false的时候返回true, 其他情况都为false
d) 逻辑非(!) : 为true的时候返回false, 为false同理
6. 位运算符 :
a) 运算与(&) : 将两个操作数转换成二进制数, 然后按位运算, 1-1=1, 1-0=1,0-1=0, 0-0=0
b) 运算或(|) : 将操作数转换成二进制数, 然后按位运算, 1-1=1, 1-0=1, 0-1=1, 0-0=0
c) 运算非(^) : 将操作数转换成二进制数,然后按位运算, 1-1=0, 1-0=1, 0-1=1, 0-0=0
d) 取反(~) : 将操作数转换成二进制数,然后按位计算,. 0=1, 1=0
7. 交换算法:
a) 第一种(使用第三方变量交换) :
temp = a;
a = b;
b = a;
b) 第二种(使用加法) :
a = a +b;
b = a - b;
a = a - b;
c) 第三种(使用异或) :
a = a ^ b;
b = a ^ b;
a = a ^ b;
8. 移位运算符 :
a) 左移(<<) : 将操作数的二进制数向左移一位, 空出来的用0补位
b) 右移(>>) : 将操作数的二进制数向右移一位, 空出来的用0补位
c) 无符号右移(>>>) : 无符号右移无论操作数为正数还是负数, 右移左边的空位永远用0补位
9. 三元运算符(三目运算符) :
a) 格式: 表达式?值1:值2
b) 表示如果表达为true的话, 会将值1返回, 如果为false的话, 会返回值2
c) 在使用三元表达式的时候需要注意, 返回的结果必须要使用, 如果不使用的话, Java编译器会报错
10. 比较运算符 :
a) 等于(==) : 判断(==)两边的操作数是否相同
b) 大于(>) : 判断(>)左边的操作数是否大于右边的操作数
c) 小于(<) : 判断(<)左边的操作数是否小于右边的操作数
d) 大于等于(>=) : 判断(>=)左边的操作数是否大于或者等于右边的操作数
e) 小于等于(<=) : 判断(<=)左边的操作数是否小于或者等于右边的操作数
f) 不等于(!=) : 判断(!=)左边的操作数是不是和和右边的相等
11. 赋值运算符 :
a) 等于(=) : 把等号右边的值赋给左边的变量
b) 加等于(+=) : 用等号左边的值加上右边的值赋给左边的变量, 如int i = 1; i += 2;结果i的值等于3
c) 减等于(-=) : 用等号左边的值减去右边的值, 把结果赋给左边的变量
d) 乘等于(*=) : 把左右两边的值相乘后赋给左边的变量
e) 除等于(/=) : 用等号左边的值除以右边的值, 把结果赋给左边的变量
f) 模等于(%=) : 用等号左边的和右边的值取模, 然后把结果赋给左边的变量
12. 运算符优先级 :
13. 流程控制语句 :
正常代码的执行都是从上往下的, 每个分号都表示一个语句的结尾
14. if判断语句有三种情况:
a) 第一种, 表示如果if里面的表达式成立则执行括号里面的代码
if(表达式){
//待执行的代码;
}
b) 第二种, 表示如果if里面的表达式成立则执行if中的代码, 否则执行else中的代码:
if(表达式){
//待执行的代码;
}else{
//待执行代码;
}
c) 第三种, 如果if里面的表达式如果成立则执行里面的代码, 否则就继续判断, 知道最后一个if里面的表达式都不成立的话, 则执行else里面的代码
if(表达式){
//待执行的代码;
}if(表达式){
//待执行的代码;
}if(表达式){
//待执行的代码;
}else{
//待执行的代码;
}
15. 选择语句(switch) :
a) switch的格式:
switch(表达式){
case 值 :
//待执行的代码;
break;
case 值 :
//待执行的代码;
break;
case 值 :
//待执行的代码;
break;
case 值 :
//待执行的代码;
break;
default :
//待执行的代码;
break;
}
b) 使用switch需要注意 :
i. case 后面的值一定得是常量, 不能是变量
ii. 在JDK1.7之前的版本, switch中的表达式一定得是 byte, char, short, int 四种类型
iii. 在JDK1.7的新特性中支持String类型
iv. 如果switch找到匹配项之后会执行里面的代码, 并继续向下执行, 直到遇到break;或者结束括号, 一般都是建议在case结束后加上break. 因为不加上break;的流程是不符合我们的逻辑的.
16. while循环语句 :
a) while格式 :
while(表达式){
//待执行的代码;
}
b) 一般while语句中的表达式都是用变量来控制循环的次数
int i = 0;
while(10 < i++){
System.out.print(i);
}