6.1 算术运算符
Java 语言提供了执行加减乘除四则运算的运算符。 算数运算符被用在数学表达式中,可以使用任意嵌套的小括号,其作用与数学中相同。下表列出了算术运算符:
运算符 | 描述 | 例子 |
---|---|---|
+ | 加法运算符(也用于连接字符串) | a+b |
- | 减法运算符 | a-b |
* | 乘法运算符 | a*b |
/ | 除法运算符 | a/b |
% | 取余运算符 | a%b |
++ | 自增运算符 | a++ |
-- | 自减运算符 | a-- |
6.2 关系运算符
关系运算符又称为比较运算符,比较的结果是一个布尔类型的值(true 或 false)。Java语言中有如下可用于变量比较的运算符(在例子中,初始化int a = 2; int b = 4):
运算符 | 描述 | 例子 |
---|---|---|
== | 相等 | a==b,为假 |
!= | 不等于 | a != b,为真 |
> | 大于 | a > b,为假 |
< | 小于 | a < b,为真 |
>= | 大于或等于 | a >=b,为假 |
<= | 小于或等于 | a <= b,为真 |
6.3 位运算符
Java语言还提供了对整数类型执行按位和移位操作的运算符,称为位运算符。在实际的编码中位运算符并不常用。下表列出了位运算的基本运算:
运算符 | 描述 |
---|---|
& | 按位与,如果相对应位都是1,则结果为1,否则为0 |
| | 按位或,如果相对应位都是0,则结果为0,否则为1 |
^ | 按位异或,如果相对应位相同,则结果为0,否则为1 |
~ | 按位取反,翻转操作数的每一位,即0变1,1变0 |
<< | 按位左移,左操作数按位左移右操作数指定的位数,如a << 2 |
>> | 按位右移,左操作数按位右移右操作数指定的位数,如a >> 2 |
>>> | 零填充右移,按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充,如 a >>> 2 |
案例如下:
public class Demo {
public static void main(String[] args) {
// a 的二进制表示:0000 0010 b的二进制表示:0000 0101
int a = 2, b = 5;
System.out.println(a & b); // 0
System.out.println(a | b); // 7
System.out.println(a ^ b); //7
System.out.println("取反运算结果"+~a); // -3
System.out.println(a << 2); // 8
System.out.println(b >> 2); // 1
System.out.println(a >>> 2); // 0
}
}
6.4 逻辑运算符
逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。&(与)、|(或)、!(非)、&&(短路与)、||(短路或)、^(异或)都是java中的逻辑运算符,逻辑运算符可以在表达式中生成组合条件,例如在执行特定语句块之前必须满足的两个或多个条件。使用逻辑运算符可以描述这些组合,逻辑运算符的返回结果只能为真(true)或假(false)。具体用法见下表:
逻辑运算符 | 名称 | 示例 | 作用 |
---|---|---|---|
& | 与 | a & b | a,b都为真,则结果为真,反之,a,b都为假,则结果为假 |
| | 或 | a | b | a,b有一个为真,则结果为真 |
! | 非 | !a | a为真则结果为真,a为假则结果为假 |
&& | 短路与 | a && b | a,b都为真,则结果为真 |
|| | 短路或 | a || b | a,b有一个为真,则结果为真 |
^ | 异或 | a ^ b | a,b都为真,或都为假时,结果为假 |
实例如下:
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));
System.out.println("a || b = " + (a||b) );
System.out.println("!(a && b) = " + !(a && b));
}
}
// 运行结果
/*
a && b = false
a || b = true
!(a && b) = true
*/
6.4.1 &和&&
&与&&都表示逻辑与,它们的区别在于**`&`**需要判断左右两边的值才能确定整个表达式的值。而**`&&`**有时只需判断左边的值就可以确定整个表达式的值,`当左边的值为false时,就不需要判断右边的值了,此时整个表达式的值为false`。当左边的值为true时,此时需要判断右边的值了,若右边的值为true,此时整个表达式的值为true,若右边的值为false时,此时整个表达式的值为false。
结合下面的代码可以有更好地理解:
public class Demo01 {
public static void main(String[] args) {
if (A() & C()) { //A()方法和C()方法作逻辑与运算
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
public static boolean A() {
System.out.println("我是方法A");
return true;
}
public static boolean B() {
System.out.println("我是方法B");
return false;
}
public static boolean C() {
System.out.println("我是方法C");
return true;
}
}
上面的代码中定义了3个方法,A方法和C方法都返回true,B方法返回false,在主方法中使用if语句将A方法和C方法做逻辑与&运算,根据&的运算法则,需要判断左右两边的值才能确定整个表达式的值,A方法和C方法都为真,那么结果应该为真。执行结果如下:
从执行结果可以看到,控制台输出了A方法和C方法中的输出语句,说明&左右两边都执行了,还输出了“结果为真”,说明两边为真则结果为真。
同理,修改主方法中if语句中的表达式,将A方法和B方法做&运算,结果如下:
说明左右两边有一边为假,则结果为假。
交换if语句中A()和B()的位置,
public static void main(String[] args) {
if (B() & A()) {
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
执行结果如下:
接下来我们看&&逻辑运算符
修改主方法中if语句中的表达式,将A()方法和B()方法作&&(短路与)运算
public static void main(String[] args) {
if (A() && B()) {
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
执行结果如下:
将A()方法和B()方法位置调换:
public static void main(String[] args) {
if (B() && A()) {
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
只是调换了一下位置,结果就不一样了。是因为&&运算符在判断左边的值时,左边的值为false,就不用判断右边的值了,整个表达式的值为false。所以只执行了B方法中的输出语句,A方法没有执行。可以对比上面的A()和B()做&运算的结果(下图),&运算左右两边都执行了,&&只执行了左边。
6.4.2 | 和 ||
| 和 || 都表示逻辑或,其用法跟&和&&差不多, || 的运算法则是当左边的值为true时,就不用判断右边了,整个表达式结果为tru
。若左边为false,需要判断右边的值,右边为true,则整个表达式结果为true,右边为false,则则整个表达式结果为false。
结合代码理解,修改上面的代码:
public static void main(String[] args) {
if (A() | B()) {
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
结果如下:
| 运算一边为真,则结果为真。做 || 运算结果如下:
左边为true,右边不用判断,所以没有执行B方法。调换if中A()和B()的位置,结果如下:
左边为false,需要判断右边,右边为true,所以结果为true,两个方法都执行了。
6.4.3 逻辑运算符的优先顺序
逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非) → &&(与) → ||(或)
分析下面代码:
public static void main(String[] args) {
if (B() || A() && C()) {
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
若按照优先顺序,先运算 A() && C(),之后B()再和(A() && C())的结果做短路或(||)运算
执行结果:
执行的结果时按照左右顺序来的????????
我表示一脸懵!!待研究······
Tips
:&&的优先级高于||,但运算符的优先级与系统进行表达式运算的顺序没有必然的关系,比如表达式B() || A() && C(),由于&&优先级高于||,所以等效于B() ||( A() && C()),但是系统会先对表达式中的B()进行判断,若B()的值为真,则由于逻辑运算符的短路效应,后面的表达式A() && C()就不再判断;反之则继续进行表达式A() && C()的判断。
public static void main(String[] args) {
if (A() || B() && C()) { //A()方法和C()方法作逻辑与运算
System.out.println("结果是真!!!");
} else {
System.out.println("结果是假!!!");
}
}
如上代码所示,A()的值为真,由短路效应得知,B() && C()就不用判断了,其运行结果如下:
6.5 赋值运算符
赋值运算符是为指定变量分配值的符号,如下是Java中常用的赋值运算符:
运算符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将值从右侧操作数分配给左侧操作数 | c = a + b将a + b的值赋给c |
+= | 加和赋值运算符。它将右操作数添加到左操作数,并将结果分配给左操作数。 | c += a等于c = c + a |
-= | 减和赋值运算符。它从左侧操作数中减去右侧操作数,并将结果分配给左侧操作数。 | c -= a等于c = c - a |
*= | 乘和赋值运算符。它将右操作数与左操作数相乘,并将结果分配给左操作数。 | c *= a等于c = c * a |
/= | 除和赋值运算符。它将左操作数除以右操作数,并将结果分配给左操作数。 | c /= a等于c = c / a |
6.6 其他运算符
6.6.1 条件运算符
条件运算符也称为三元运算符。该运算符由三个操作数组成,用于判断布尔表达式。它的目的是确定应将哪个值分配给变量。条件运算符的语法为:
变量 = (布尔表达式) ? 值1 : 值2
如果布尔表达式为真,就将 值1
分配变量,否则将 值2
分配给变量。实例如下:
public class Demo02 {
public static void main(String[] args) {
int age = 18;
System.out.println((age>=18) ? "你已成年了!" : "你还未成年呢!");
}
// 控制台输出“你已成年了!”
}
6.6.2 instanceof 运算符
instanceof
运算符将对象与指定类型进行比较,检查对象是否是一个特定类型(类类型或接口类型)。
语法为:
( Object reference variable ) instanceof (class/interfacetype)
instanceof左侧的变量所指向的对象,是instanceof右侧类或接口的一个对象,结果为真,否则结果为假。实例如下:
public class Demo02 {
public static void main(String[] args) {
String str = "Hello, world";
boolean b = str instanceof String;
System.out.println(b);
}
// 控制台输出“true”
}
标签:重学,Java,结果,System,运算符,&&,println,out
From: https://www.cnblogs.com/XQ-Yang/p/17122323.html