1.自加自减运算
-
++在前,先自加,后使用;
-
++在后,先使用,后自加。
public class TestIncrementOperator1{
public static void main(String[] args){
int i = 1;
int j = 1;
System.out.println("i++:"+ i++); //=1
System.out.println("++j:"+ ++j); //=2
}
}
2.逻辑运算符
用来连接两个布尔类型结果的运算符(!
除外),运算结果一定是boolean值true
或者false
&&和&区别,||和|区别:
-
&&
和&
区别:-
&&
和&
结果一样,&&
有短路效果,左边为false,右边不执行;&
左边无论是什么,右边都会执行。
-
-
||
和|
区别:-
||
和|
结果一样,||
有短路效果,左边为true,右边不执行;|
左边无论是什么,右边都会执行。
-
3.条件运算符
条件运算符格式: 条件表达式?结果1:结果2
条件运算符计算方式:
-
条件判断的结果是true,条件运算符整体结果为结果1,赋值给变量。
-
判断条件的结果是false,条件运算符整体结果为结果2,赋值给变量。
public class ConditionOperator{
public static void main(String[] args){
//判断两个变量a,b谁大,把大的变量赋值给max
int a = 2;
int b = 2;
int max = a >= b ? a : b;
//如果a>=b成立,就取a的值赋给max,否则取b的值赋给max
System.out.println(max); //=a
boolean marry = false;
System.out.println(marry ? "已婚" : "未婚" ); //未婚
}
}
4.位运算符
如何区分&,|,^是逻辑运算符还是位运算符?
如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符
-
位运算符的运算过程都是基于补码运算,但是看结果,我们得换成原码,再换成十进制看结果
-
从二进制到十进制都是基于原码
-
正数的原码反码补码都一样,负数原码反码补码不一样
-
byte,short,char在计算时按照int类型处理
(1)左移:<<
运算规则:左移几位就相当于乘以2的几次方
3<<4 类似于 3*2的4次= 3*16 = 48
-3<<4 类似于 -3*2的4次= -3*16 = -48
(2)右移:>>
快速运算:类似于除以2的n次,如果不能整除,向下取整
69>>4 类似于 69/2的4次 = 69/16 =4
-69>>4 类似于 -69/2的4次 = -69/16 = -5
(3)无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0,不看符号位
正数:和右移一样
负数:右边移出去几位,左边补几个0,结果变为正数
69>>>4 类似于 69/2的4次 = 69/16 =4
-69>>>4 结果:268435451
(4)按位与:&
运算规则:对应位都是1才为1
1 & 1 结果为1
1 & 0 结果为0
0 & 1 结果为0
0 & 0 结果为0
9&7 = 1
-9&7 = 7
(5)按位或:|
运算规则:对应位只要有1即为1
1 | 1 结果为1
1 | 0 结果为1
0 | 1 结果为1
0 & 0 结果为0
(6)按位异或:^
运算规则:对应位一个为1一个为0,才为1
1 ^ 1 结果为0
1 ^ 0 结果为1
0 ^ 1 结果为1
0 ^ 0 结果为0
(7)按位取反:~
运算规则:~0就是1
~1就是0
5.赋值运算符
public class OperatorDemo04 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = a + b;
b += a;// 相当于 b = b + a ;
System.out.println(a); // 3
System.out.println(b); // 7
System.out.println(c); //7
short s = 3;
// s = s + 4; 代码编译报错,因为将int类型的结果赋值给short类型的变量s时,可能损失精度
s += 4; // 代码没有报错
//因为在得到int类型的结果后,JVM自动完成一步强制类型转换,将int类型强转成short
System.out.println(s);
int j = 1;
j += ++j * j++;//相当于 j = j + (++j * j++);
System.out.println(j);//5
int m = 1;
m <<= 2;
System.out.println(m);
}
}
-
扩展赋值运算符在将最后的结果赋值给左边的变量前,多做了一步强制类型转换。
-
注意:所有的赋值运算符的=左边一定是一个变量
7.运算符优先级
口诀:
单目运算排第一;
乘除余二加减三;
移位四,关系五;
等和不等排第六;
位与、异或和位或;
短路与和短路或;
依次从七到十一;
条件排在第十二;
赋值一定是最后;
8.标点符号(12个)
-
小括号()用于强制类型转换、表示优先运算表达式、方法参数列表
-
大括号{}用于数组元素列表、类体、方法体、复合语句代码块边界符
-
中括号[]用于数组
-
分号;用于结束语句
-
逗号,用于多个赋值表达式的分隔符和方法参数列表分隔符
-
英文句号.用于成员访问和包目录结构分隔符
-
英文省略号...用于可变参数
-
@用于注解
-
双冒号::用于方法引用