3.逻辑运算符
运算符 | 用法 | 含义 | 说明 | 实例 | 结果 |
&&
|
a&&b
|
短路与
|
ab
全为
true
时,计算结果为
true
,否则为false。
|
2>1&&3<4
| true |
||
|
a||b
|
短路或
|
ab
全为
false
时,计算结果为
false
,否则为true。
|
2<1||3>4
| false |
!
|
!a
|
逻辑非
|
a
为
true
时,值为
false
,
a
为
false
时,值为 true
|
!(2>4)
| true |
|
|
a|b
|
逻辑或
|
ab
全为
false
时,计算结果为
false
,否则为true
|
1>2|3>5
| false |
&
|
a&b
|
逻辑与
|
ab
全为
true
时,计算结果为
true
,否则为false
|
1<2&3<5
| true |
&& 与 &
区别:如果
a
为
false
,则不计算
b
(因为不论
b
为何值,结果都为
false
)
|| 与 |
区别:如果
a
为
true
,则不计算
b
(因为不论
b
为何值,结果都为
true
)
注意:短路与(&&
)和短路或(
||
)能够采用最优化的计算方式,从而提高效率。在实际编程时,应 该优先考虑使用短路与和短路或
结果为 boolean
型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式。逻辑运算符
&&
、
||
和 !按表 2
进行逻辑运算。
a | b | a&&b | a||b | !a |
true | true | true | true | false |
false | true | false | true | true |
true | false | false | true | false |
false | false | false | false | true |
逻辑运算符的优先级为:!运算级别最高,&&
运算高于
||
运算。!运算符的优先级高于算术运算符, 而 &&
和
||
运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或 (双目运算符)具有左结合性。
4.比较运算符(关系运算符)
运算符的结果是true 或 false
运
算
符
|
含
义
|
说明
|
实例
|
结果
|
>
| 大于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值大于后面 变量的值,则返回 true
。
| 2>3 | false |
>=
| 大于或等于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值大于等于 后面变量的值,则返回 true
。
| 4>=2 | true |
<
| 小于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true
。
| 2<3 | false |
<= | 小于或等于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true
。
| 4<=2 | false |
== | 相等于运算符 |
如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true
。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回true。
Java
也支持两个
boolean
类型的值进行比较。
|
44 87'a'
5.05
truefalse
| true true true false |
!= | 不相等运算符 |
如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true
。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回true。
| 4!=2 | true |
注意点如下所示:
1.
基本类型的变量、值不能和引用类型的变量、值使用
==
进行比较;
boolean
类型的变量、值不能
与其他任意类型的变量、值使用
==
进行比较;如果两个引用类型之间没有父子继承关系,那么它
们的变量也不能使用
==
进行比较。
2. ==
和
!=
可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指 向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否 为同一个对象。
关系运算符的优先级为:>
、
<
、
>=
、
<=
具有相同的优先级,并且高于具有相同优先级的
!=
、
==
。关系 运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
关系表达式通常用于
Java
程序的逻辑判断语句的条件表达式中。使用关系表达式要注意以下几点:
运算符 >=
、
==
、!
=
、
<=
是两个字符构成的一个运算符,用空格从中分开写就会产生语法错误。例如
x> =y;
是错误的,但是可以写成
x >= y;
在运算符的两侧增加空格会提高可读性。同样 将运算符写反,例如 =>
、
=<
、
=!
等形式会产生语法错误。
由于计算机内存放的实数与实际的实数存在着一定的误差,如果对浮点数进行 ==
(相等)或
!= (不相等)的比较,容易产生错误结果,应该尽量避免。
不要将“==”
写成
“=”
。
/*
* Copyright (c) 2020, 2023, lzq.cn All rights reserved.
*
*/
package cn;
/**
* <p>Project: jiaocheng - T6</p>
* <p>Powered by lzq On 2023-07-08 11:47:36</p>
* <p>描述:<p>
*
* @author lzq [2391211247@qq.com]
* @version 1.0
* @since 17
*/
public class T6 {
public static void main(String[] args) {
System.out.println(2 >= 3);
System.out.println(2 < 3);
System.out.println(2 <= 3);
System.out.println(2 == 3);
System.out.println(2 != 3);
System.out.println(1 == .5);
int a = 1;
double b = 1.0;
System.out.println(a == b);
System.out.println("--------------------");
String s1 = "ok";
String s2 = "ok";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
String s3 = new String("java");
String s4 = new String("java");
System.out.println(s3);
System.out.println(s4);
//String p1 = "admin"; p2 = "admin"
//判断字符串对象的堆内存中的地址是不是相等
System.out.println(s3 == s4);
//判断字符串值是否相等
System.out.println(s3.equals(s4));
}
}
5.三元运算符
语法格式:
关系表达式 ?
表达式
1 :
表达式
2;
解释 :问号前面的位置是判断的条件,判断结果为boolean
型,为
true
时调用表达式
1
,为
false
时调用表达式2
。其逻辑为:如果条件表达式成立或者满足则执行表达式
1
,否则执行表达式
2
。
/*
* Copyright (c) 2020, 2023, lzq.cn All rights reserved.
*
*/
import java.util.Calendar;
/**
* <p>Project: jiaocheng - T9</p>
* <p>Powered by lzq On 2023-07-08 14:17:23</p>
* <p>描述:<p>
*
* @author lzq [2391211247@qq.com]
* @version 1.0
* @since 17
*/
public class T9 {
public static void main(String[] args) {
//System.out.println(6=3);
//int i = 10;
//System.out.println(age);
//System.out.println(i);
//System.out.println(false && i=3);
//System.out.println(i = 6);
int num = true ? 10 : 100;
System.out.println(num);
//true ? System.out.println("yes") : System.out.println("No");
String str = Math.random() > .5 ? "Yes" : "No";
System.out.println(str);
//Math.random() 返回随机double1.0-0.0 之间的随机小数
System.out.println(Math.random() > .5 ? 1000 : 9999);
var c = Calendar.getInstance();
var h = c.get(Calendar.HOUR_OF_DAY);
System.out.println(h < 12 ? "上午" : "下午");
if (h < 12) {
System.out.println("上午");
} else {
System.out.println("下午");
}
}
}