2、运算符
-
运算符
运算符是一个特殊的符号,用以表示数据的运算、赋值和比较等;
运算符包括以下几种
- 算数运算符
+
、-
、*
、/
、++
、--
、%
- 赋值运算符
=
- 比较运算符
>
、<
、==
、!=
、>=
、<=
- 逻辑运算符
&&
、||
、!
- 位运算符
&
、|
、^
- 三元运算符
boolean ? 1 :0
- 算数运算符
算数运算符
class Test {
public static void main(String[] args) {
// 除号 : /
int num1 = 12;
int num2 = 5;
int result = num1 / num2;
System.out.println(result); // 2
int result2 = num1 / num2 * num2;
System.out.println(result2); // 10
double result3 = num1 / num2;
System.out.println(result3); // 2.0 num1 / num2 得到的是一个int 2 然后自动提升到double
double result4 = num1 / num2 + 0.0;
System.out.println(result4); // 2.0 先乘除后加减 与上面得到的结果是一致的
double result5 = num1 / (num2 + 0.0);
System.out.println(result5); // 2.4 (num2 + 0.0)自动提成double 之后num1 / num2 在自动提升
// 取模 : %
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
//自增自减++ --
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + " b1 = " + b1); // 11 10
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + " b2 = " + b2); // 11 11
// 注意:Java 的另一种自增1 看以下代码
//short s1 = 10;
//s1 = s1 + 1; // 这么写是有问题的,因为1为int 常量 s1 + 1 会自动提升int 型
//s1 = (short)(s1 + 1);
//s1++; 自增不会改变数据类型
//byte byt1 = 127;
//byt1++; // 不会改变数据类型,不会出错
//System.out.println(byt1); // -128 二进制 01111111+1 符号位为10000000 = -128
int a3 = 10;
int b3 = --a3;
System.out.println("a3 = " + a3 + " b3 = " + b3); // 9 9
int a4 = 10;
int b4 = a4--;
System.out.println("a4 = " + a4 + " b4 = " + b4); // 9 10
}
}
-
赋值运算符
符号:
=
、+=
、-=
、*=
、\=
、%=
class Test { public static void main(String[] args) { // 赋值符号 = int i = 10; int j = 10; int i1 , j1; i1 = j1 = 10; int i2 = 10, j2 = 11; int num1 = 10; num1 += 10; System.out.println(num1); // 20 int num2 = 12; num2 %= 5; System.out.println(num2); // 2 short s1 = 10; s1 += 2; System.out.println(s1); // 12 } }
-
比较运算符
符号:
==
、!=
、<
、>
、<=
、>=
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); //20; boolean b1 = true; boolean b2 = false; System.out.println(b1 == b2); // false System.out.println(b2 = b1); // true } }
-
逻辑运算符
符号:
&
、|
、^
、&&
、||
、!
各符号的含义
-
& 两个参数都为
true
时为true
,否则为false
但是& 不管第一个参数是否为false 都需要与第二个参数进行位运算比较 -
&& 两个参数都为
true
时为true
,否则为false
。当第一个参数为假的时候,第二个参数就不会在被计算 -
| 两个参数只要有一个为
true
就为true
,否则为fasle
-
|| 两个参数只要有一个为
true
就为true
,否则为fasle
-
! 参数取反 当参数为
true
时结果为false
, 当参数为false
时结果为true
- ^
&
和&&
之间的区别
class Test {
public static void main(String[] args) {
boolean b1 = true;
int num1 = 10;
if (b1 & (num1++ > 0)) {
System.out.println("ok"); // ok
} else {
System.out.println("fail");
}
System.out.println("num1 = " + num1); //11
boolean b2 = true;
int num2 = 10;
if (b2 && (num2++ > 0)) {
System.out.println("ok"); // ok
} else {
System.out.println("fail");
}
System.out.println("num2 = " + num2); //11
// 逻辑与和短路与的区别 =========================================
boolean b3 = false;
int num3 = 10;
if (b3 && (num3++ > 0)) {
System.out.println("ok");
} else {
System.out.println("fail"); //fail
}
System.out.println("num3 = " + num3); //11
boolean b4 = false;
int num4 = 10;
if (b4 & (num4++ > 0)) {
System.out.println("ok"); // ok
} else {
System.out.println("fail");
}
System.out.println("num4 = " + num4); //10
}
}
同理|
与 ||
和上述特征一致
-
位运算符
用的较少,了解即可
符号:
<
、>>
、>>>
、&
、|
、^
、~
- 左移
<<
每向左移n位 相当于乘以 2 的 n 次幂例如 1 << 2 相当于 1 * 2 * 2 - 右移
>>
每向左移n位 相当于除以以 2 的 n 次幂例如 1 >> 2 相当于 1 / 2 / 2 - 无符号右移
>>>
被右移的最高位无论是0还是1,都用0来补 - 与运算
&
二进制&
运算 只有1 & 1
时结果为1,否则都为0 - 或运算
|
二进制|
运算 只有0 | 0
时结果为0,否则都为1 - 异或运算
^
二进制^
只有当两个位不相等的时候为1 否则为01 ^ 1 = 0
,1 ^ 0 = 1
- 取反运算
~
各二进制码按补码各位取反
位运算是直接对整数的二进制进行的运算
class Test { public static void main(String[] args) { int i = 1; System.out.println("i << 2 = "+ (i<<2)); //4 1 << 2 相当于 1 * 2 * 2 } }
- 左移
-
三元运算符
符号:
(条件) ? 结果1 :结果2
解释:当条件为
true
时 得到结果1
否则得到结果2
直接看代码
class Test { public static void main(String[] args) { boolean isOk = true; String msg = isOk ? "ok" : "error"; System.out.println(msg); // ok isOk = false; msg = isOk ? "ok" : "error"; System.out.println(msg); // error // 相当于 以后要学的if else if( isOk ) { msg = "ok"; } else { msg = "error"; } System.out.println(msg); } }