+ - * / % (前)++ (后)++ (前)-- (后)-- +
示例代码
class Test{ public static void main(String[] args){ // 除号 / int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1); // 2 // 取余运算 % int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1 ); // 2 int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2 ); // -2 int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3 ); // 2 int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4 ); // -2 // (前)++:先自增1,后运算 // (后)++:先运算,后自增1 int a1 = 10; int b1 = ++a1; System.out.println("a1 = " a1 + ",b1 = " + b1 ); // 11 11 int a2 = 10; int b2 = a2++; System.out.println("a2 = " a2 + ",b2 = " + b2 ); // 11 10 // (前)--:先自减1,后运算 // (后)--:先运算,后自减1 int a3 = 10; int b3 = a3--; System.out.println("a3 = " a3 + ",b3 = " + b3 ); // 9 10 } }
特别说明
1.// (前)++:先自增1,后运算
// (后)++:先运算,后自增1
2.// (前)--:先自减1,后运算
// (后)--:先运算,后自减1
3.连接符:+:只能使用在Sting与其他数据类型变量之间使用。
= += -= *= /= %=
示例代码
class Test{ public static void main(String[] args){ // 连续赋值 int i1 = j1 = 10; int i2 = 10, j2 = 20; // **** int i3 = 10; i3 += 2; System.out.println(i3); // 12 // **** short m1 = 10; //m1 = m1 +2; // 编译不通过 m1 += 2; System.out.println(m1); // 12 不会改变变量本身的数据类型 } }
特别说明
1.运算结果不会改变变量本身的数据类型
2.开发中,如果希望变量实现+2的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 2 ;
方式二:num += 2;(推荐)
开发中,如果希望变量实现+1的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 1 ;
方式二:num += 1;
方式三:num++;(推荐)
== != > < >= <= instanceof
示例代码
class Test{ public static void main(String[] args){ int i = 10; int j = 20; System.out.println(i == j); // false System.out.println(i = j); // 10 boolean b1 = true; boolean b2 = false; System.out.println(b1 == b2); // false System.out.println(b2 = b1); // true } }
特别说明
1.比较运算符的结果是boolean类型
2.> < >= <= :只能使用在数值类型的数据之间
3.==和!=:不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间
& && | || ! ^
示例代码
class Test{ public static void main(String[] args){ // 区分& 与 && // 相同点1:& 与 && 的运算结果相同 // 相同点2:当符号左边是true时,二者都会执行符号右边的运算 // 不同点:低昂符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算 // 开发中,推荐使用&& boolean b1 = true; b1 = false; int num1 = 10; if(b1 & (num1++ > 0)){ System.out.println("true"); }else{ System.out.println("false"); } System.out.println("num1 = " + num1); boolean b2 = true; b2 = false; int num2 = 10; if(b2 && (num2++ > 0)){ System.out.println("true"); }else{ System.out.println("false"); } System.out.println("num2 = " + num2); boolean b3 = false; b3 = true; int num3 = 10; if(b3 & (num3++ > 0)){ System.out.println("true"); }else{ System.out.println("false"); } System.out.println("num3 = " + num3); boolean b4 = false; b4 = true; int num4 = 10; if(b4 && (num4++ > 0)){ System.out.println("true"); }else{ System.out.println("false"); } System.out.println("num4 = " + num4); } }
特别说明
1.逻辑运算符操作的都是boolean类型的变量。而且结果页数boolean类型
<< >> >>> & | ^ ~
示例代码
class Test{ public static void main(String[] args){ int i = 21; i = -21; System.out.println("i << 2 :" + (i << 2)); // -84 System.out.println("i << 3 :" + (i << 3)); // -168 System.out.println("i << 27 :" + (i << 27)); // 1476395008 int m = 12; int n = 5; System.out.println("m & n:" + (m & n)); // 4 System.out.println("m | n:" + (m | n)); // 13 System.out.println("m ^ n:" + (m ^ n)); // 9 } }
面试题:你能否写出最高效的2 * 8的实现方式?
2 << 3 或 8 << 1
特别说明
1.位运算符操作的都是整型的数据
2.<<:在一定范围内,每向左移1位,相当于 * 2
>>:在一定范围内,每向右移1位,相当于 / 2
(条件表达式)? 表达式1 : 表达式2
示例代码
class Test{ public static void main(String[] args){ int x = 10; int y = 20; int z = 30; int max; max = (x > y)? ((x > z)? x : z) : ((y > z)? y : z); System.out.println("三个数中最大的数是:" + max); if(x > y && x > z){ max = x; }else if(y > x && y > z){ max = y; }else{ max = z; } System.out.println("三个数中最大的数是:" + max); } }
特别说明
1.条件表达式的结果位boolean类型
2.根据条件表达式真或假,决定执行表达式1,还是表达式2
如果表达式为true,则执行表达式1
如果表达式为false,则执行表达式2
3.表达式1和表达式2要求是一致的
4.三元运算符可以嵌套使用
5.凡是可以使用三元运算符的地方,都可以改写为if-else,反之,不成立
6.如果程序既可以使用三元运算符,又可以使用if-esle结果,那么优先选择三元运算符。原因:简洁、执行、效率高