`
liuwei1981
  • 浏览: 770628 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:160889
社区版块
存档分类
最新评论

40.关系与布尔运算符

 
阅读更多

1.关系运算符

 

在Java中,提供了完整了关系运算符。Java中,关系运算符包括:>,<,>=,<=,==,!=,用来对两个简单类型操作数进行比较运算,所组成的表达式结果为boolean类型的值true或false。

注意:除了“==”和“!=”外,其他的关系运算符都不能用在boolean类型的操作数中。

 

在这边需要提醒注意的是,在Java中,“不等于”是用“!=”表示的,而不是一些编程语言的“<>”,而等于也是和一些编程语言不一样,它使用“==”而非“=”,在Java中,“=”用于赋值操作,而非关系运算符。


“==”和“!=”除了用于简单类型的操作数外,还可以用于比较引用类型数据。

 

2.布尔运算符

 

布尔运算符也称逻辑运算符,包括:!,&,|,^,&&,||,这些运算符分别实现“非”、“与”、“或”、“异或”、“短路与”、“短路或”等逻辑运算。

 

和关系运算一样,逻辑运算结果也是布尔类型值true或false,Java语言中逻辑运算规则与其它语言中的相近。


在布尔运算符中,需要特别说明的是,短路与“&&”和短路或“||”,这两个运算符是按照“短路”的方式进行求值的,也就是说,如果第一个表达是已经可以判断出整个表达式的值时,就不进行后面的运算了。

 

例如,当对表达式a&&b进行运算时,如果表达式a的值为false,将不对b的值进行计算。而当对表达式a||b进行运算时,如果a 的值为true,将不对b的值进行计算。

 

请看下面的例子。

 

public class ShortCircuit {
 public static void main(String[] agrs) {
  ShortCircuit sc = new ShortCircuit();
  System.out.println("短路或运算");
  System.out.println(sc.Ma() || sc.Mb() || sc.Mc());
  System.out.println("短路与运算");
  System.out.println(sc.Ma() && sc.Mb() && sc.Mc());
 }

 boolean Ma() {
  System.out.println("Ma()被调用!");
  return 1 < 2;// true
 }

 boolean Mb() {
  System.out.println("Mb()被调用!");
  return 1 == 2;// false
 }

 boolean Mc() {
  System.out.println("Mc()被调用!");
  return 1 > 2;// false
 }
}

上面的程序中,因为方法Ma()的值为true,而“或”运算中如果有一个表达式为真(true),则整个表达式均为真(true),因此,无需计算后面方法Mb()和方法Mc()这两个表达式就可以得到整个表达式的值了。

 

而第二条“短路与”语句,因为在逻辑“与”运算中,只需要一个表达式的值为假(false),则整个表达式的值都为假(false)。Ma()为真(true),所以将进行第二个表达式的运算,它将调用方法Mb(),而此时,Mb()方法的返回值为假(false),所以将不用进行后面的运算了。

编译运行上面的程序,将得到如下的输出:
短路或运算
Ma()被调用!
true
短路与运算
Ma()被调用!
Mb()被调用!
false


注意:运算符“&&”和“&”、“||”和“|”所求得的结果是一样的,它们的区别在于,“&”和“|”不会进行“短路”运算,而是会计算运算符两边的各个参数的值。

 

在实际编程中,如无特殊要求,建议均使用短路运算符。

 

因为在实际编程中,如果需要对两个逻辑布尔表达式进行与或运算,第一点,使用短路运算,在可以确认布尔运算结果的情况下,不需对第二个布尔运算进行计算,节省了运算资源时间。更重要的一点,很多时候两个布尔逻辑表达式是相关联的。

 

比如在一个与运算中,第一个布尔运算为true的情况下,再进行第二个布尔运算,从而得到结果是合理的。如果第一个已经是false了,若不是短路运算符的话,仍会执行第二个布尔运算,但实际情况是,第一个运算不通过的话,第二个布尔运算是会发生异常的。

 

看下面的例子。以Student类为例:

 

Student s = null;

 

if(s !=null && s.getAge()>18){

  System.out.println("成年");

}

 

如果不使用短路与,在s为null,最终结果肯定是false的情况下,Java运行仍会执行第二个布尔运算,但是此时s为null,调用null引用对象,会发生空指针引用异常的。

 

但如果使用短路运算,则不会进行第二个布尔运算,就不会发生这种情况了。避免发生难以发觉处理的异常信息。

分享到:
评论

相关推荐

    第02章.数据类型和运算符2.pdf

    SXT 技能点列表是指在 Java 中的一些重要技能点,例如标识符、常量和变量、整型、浮点型、字符型、布尔型、算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符等。 在本章中,我们详细介绍了 ...

    3.2.2 java中的关系与条件运算符.docx

    Java中的关系与条件运算符是编程中用于比较和构建复杂逻辑判断的重要组成部分。关系运算符主要涉及数值间的比较,而条件运算符则用于构造更复杂的布尔表达式。 关系运算符包括: 1. 大于运算符 (&gt;):当左侧操作数...

    03.C语言的运算符.pdf

    4. 关系运算符:用于比较两个操作数之间的关系,结果为布尔值,包括大于(&gt;)、小于(&lt;)、大于等于(&gt;=)、小于等于()、等于(==)、不等于(!=)等。 5. 逻辑运算符:用于逻辑运算,包括逻辑与(&&)、逻辑或(||)、逻辑非(!)等...

    java运算符优先级[整理].pdf

    关系运算符包括小于(&lt;)、大于(&gt;)、小于或等于()、大于或等于(&gt;=)等。它们的优先级相同,且从左到右。 9. 等于、不等于运算符 等于(==)、不等于(!=)运算符的优先级相同,且从左到右。 10. 按位与、按...

    2.数据类型和运算符作业答案-1

    运算符则是用来执行特定操作的符号,如算术运算符(+,-,*,/,%),关系运算符(==,!=,&lt;,&gt;,,&gt;=),逻辑运算符(&&,||,!),位运算符(如,&gt;&gt;,&gt;&gt;&gt;)等。在填空题中,我们看到逻辑运算符`&&`和`true`,以及...

    322java中的关系与条件运算符.docx

    在Java编程语言中,关系与条件运算符是构建复杂逻辑判断的关键组成部分。这些运算符用于比较数值、评估布尔表达式以及在程序中控制流程。以下是关于这些运算符的详细解释: 1. **关系运算符**: - `&gt;`:大于运算符...

    C++当中的运算符.docx

    21. **关系运算符** `, `, `&gt;`, `&gt;=`:用于比较操作数之间的大小关系。 22. **等于运算符** `==`:检查两个操作数是否相等。 23. **不等于运算符** `!=`:检查两个操作数是否不相等。 24. **按位与运算符** `&`:...

    C语言中,有哪些算术运算符

    关系运算符用于比较两个值之间的关系,并返回一个布尔值(真或假)。常见的关系运算符有: 1. **大于运算符 (&gt;)** 2. **小于运算符 (&lt;)** 3. **等于运算符 (==)** 4. **大于等于运算符 (&gt;=)** 5. **小于等于运算符 ...

    标准C基础 运算符优先级

    逻辑运算符用于组合布尔表达式,`&&` 有短路特性,如果左边为假,右边不会被执行。`||` 同样有短路特性,如果左边为真,右边不会被执行。 16. **条件运算符 ?:**: 三目运算符用于条件判断,优先级高于赋值运算符...

    C语言程序与设计运算符讲解

    关系运算符的结果是布尔类型,即`true`或`false`。 3. **逻辑运算符**:逻辑运算符包括`&&`(逻辑与),`||`(逻辑或),和`!`(逻辑非)。这些运算符用于组合和修改布尔表达式。`&&`只有当两边的表达式都为真时才返回真...

    java运算符小程序

    2. **关系运算符**:这些运算符比较两个值,返回一个布尔结果。包括`&gt;`(大于)、`(小于)、`&gt;=`(大于等于)、`(小于等于)、`==`(等于)和`!=`(不等于)。例如,`if (age &gt; 18) {...}`检查年龄是否大于18。 3...

    第三讲运算符和表达式.ppt

    C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符、逗号运算符以及指针运算符等。本讲主要围绕这些运算符展开,详细阐述它们的功能、用法以及注意事项。 1. **...

    c++运算符大全.pdf

    例如,圆括号具有最高的优先级,然后是单目运算符,接着是算术运算符、关系运算符、逻辑运算符等。理解运算符的优先级对于编写正确且有效的代码至关重要。 通过掌握这些运算符及其用法,开发者可以在C++编程中进行...

    C语言运算符优先级

    逻辑与`&&`和逻辑或`||`用于进行布尔逻辑运算,它们的优先级低于按位逻辑运算符。 ### 10. 条件运算符 条件运算符`?:`是一个三目运算符,用于根据条件执行不同的计算。 ### 11. 赋值运算符 赋值运算符`=`是最...

    掐指一算:Python运算符.pptx

    4. 布尔“与”运算符 (and):如果两个条件都为真,则结果为真。 5. 布尔“或”运算符 (or):如果至少有一个条件为真,则结果为真。 最后,运算符的优先级决定了在表达式中哪些运算先进行。优先级高的运算符先计算,...

    Java中关系运算符.pdf

    关系运算符是Java程序中的关键元素,它们不仅在逻辑判断和条件语句中起到核心作用,还在控制流程(如if语句、switch语句和循环)以及布尔表达式中发挥重要作用。正确理解和使用这些运算符是编写有效Java代码的基础。...

    vb.net初学者文档【VB.NET中的关系运算符】

    关系运算符主要用于比较两个值,并返回一个布尔结果,即`True`或`False`。它们主要分为以下几类: 1. **相等运算符**:`=` - 当两个值相等时,`=` 运算符返回 `True`,否则返回 `False`。例如: ```vb.net Dim ...

    C语言运算符的优先级、结合方向、使用形式等详细列表[借鉴].pdf

    =`(不等于):这些双目运算符用于比较两个值的关系。 12. **按位与运算符** `&`、**按位异或运算符** `^` 和 **按位或运算符** `|`:这些运算符用于对二进制数字进行按位逻辑操作。 13. **逻辑与运算符** `&&` 和...

Global site tag (gtag.js) - Google Analytics