java逻辑语句和逻辑运算符

230 阅读2分钟

逻辑语句和逻辑运算符

凡事都有顺序,java中的语句执行顺序是从上至下,而选择无处不在,在代码里面遇到需要选择执行的时,就需要使用逻辑语句控制执行。

一个简单的例子,根据学生成绩判断所处区间

graph LR
a1(开始) --> a2[学生成绩] 
a2 --小于60--> a4[不及格]
a2 --60至80--> a5[良好]
a2 --大于80--> a6[优秀]
a4 --> a7(输出)
a5 --> a7
a6 --> a7

这种问题就需要使用逻辑控制语句进行判断执行

逻辑判断

学习语句之前,我们需要知道在java中的逻辑运算符,编写逻辑表达式,才能判断结果是true还是false

逻辑运算符名称用法说明
&逻辑与a&ba和b都是true结果才为true,否则false
|逻辑或a|ba或者b其中一个为true即为true
!逻辑非!aa为true结果是false,反之亦然
&&短路与a&&b与逻辑与相同
||短路或a||b与逻辑或相同

||和|的区别在于,使用a||b时,如果a为true,则不会计算b,而a|b总是会计算a和b

&&和&的区别在于,使用a&&b时,如果a为false,则不会计算b,而a&b总是会计算a和b

if语句

if语句执行如图所示:

graph LR
a1(开始) --> a2[顺序执行] 
a2 --> a4{判断语句}
a4 --true--> a5[执行语句]
a4 --false--> a7[继续执行]
a5 --> a7

也就是说,当表达式为true时,执行特定的语句,那么可以编写代码为

    //age为学生成绩
    if(age < 60){
        System.out.println("该学生成绩不及格");
    }
    if(age >= 60 && age <= 80){
        System.out.println("该学生成绩良好");
    }
    if(age > 80){
        System.out.println("该学生成绩优秀");
    }

if-else-else if语句

使用if语句时,有时候会遇到几种可能性,并且考虑代码的阅读和之后的更新迭代,if-else应运而生

graph LR
a1(开始) --> a2[顺序执行] 
a2 --> a4{判断语句}
a4 --true--> a5[执行语句]
a4 --false--> a6[执行语句]
a5 --> a7(继续执行)
a6 --> a7

而else-if就是再多一个判断,所以代码可以更新为

    //age为学生成绩
    if(age < 60){
        System.out.println("该学生成绩不及格");
    }else if(age >= 60 && age <= 80){
        System.out.println("该学生成绩良好");
    }else{
        System.out.println("该学生成绩优秀");
    }

在java的if语句块中,如果只有一行代码,可以省略大括号{},如下

    //age为学生成绩
    if(age < 60)
        System.out.println("该学生成绩不及格");
    else if(age >= 60 && age <= 80)
        System.out.println("该学生成绩良好");
    else
        System.out.println("该学生成绩优秀");

当然,在实际的业务代码中,我们是不推荐省略大括号的

switch-case语句

switch是java中的分支语句,用于判断一个固定值的结果,在多种情况的时候,switch比if-else有更好的体验

graph TD
a1(开始) --> a4{switch语句}
a4 --值1--> a5[执行语句]
a4 --值2--> a6[执行语句]
a4 --值3--> a7[执行语句]
a4 --值4--> a8[执行语句]

注意,注意

  • switch接受byte,short,char或者int等常量表达式
  • 从Java SE 7开始,接受java.lang.String类型
  • 可以使用枚举,且不必在case标签中指明枚举名
  • 切记,重复的case值是不被允许的

那么我们可以编写代码如下

    int type = ...;
    switch(type){
        case 1:
            System.out.println("春");
            break;
        case 2:
            System.out.println("夏");
            break;
        case 3:
            System.out.println("秋");
            break;
        case 4:
            System.out.println("冬");
            break;
        default:
            System.out.println("不存在的类型");
    }

需要注意,每个case语句中的break表示跳出,如果没有写break,会继续执行下一条case语句,直到遇到break或执行完switch语句。养成良好编写习惯,从你我做起

例如以下代码在type=1的时候就会输出 春 夏 秋 冬 不存在的类型

    int type = ...;
    switch(type){
        case 1:
            System.out.print("春");
        case 2:
            System.out.print("夏");
        case 3:
            System.out.print("秋");
        case 4:
            System.out.print("冬");
        default:
            System.out.print("不存在的类型");
    }