Java常量、运算符、条件语句(超详细讲解/保姆级教学)

时间:2021-10-04 01:04:54

????作者简介:练习时长两年半的Java up主
????个人主页:老茶icon
???? ps:点赞????是免费的,却可以让写博客的作者开兴好久好久????
????系列专栏:Java全栈,计算机系列(火速更新中)
???? 格言:种一棵树最好的时间是十年前,其次是现在
????动动小手,点个关注不迷路,感谢宝子们一键三连

课程名:Java

内容/作用:知识点/设计/实验/作业/练习

学习:Java

一、前言

   学习Java常量、运算符、条件语句。

二、环境与设备

1.软件:IntelliJ IDEA 2022.3.2
2.环境:Windows 11 and JDK 11

三、原理

   多敲代码,多练习。

四、内容

常量

在程序运行过程中,不可改变的量,称为常量。

常量命名时,一般都是大写字母,如果有多个单词,用_隔开。

定义常量

在定义变量的数据类型前,加上final关键字

语法:final 数据类型 常量名=值;

final double PI=3.14;

运算符

算术运算符

需要两个操作数参与。

操作数1 算术运算符 操作数2;

符号 含义 说明
+ 四则运算的相加或字符串拼接 符号两端都是数值,作为相加使用;有一端为字符串,作为拼接使用。
- 四则运算的相减 只能用于数值型
* 四则运算的相乘 只能用于数值型
/ 四则运算的相除 整数相除,结果去除小数部分。10/3结果为3
% 四则运算的取余(求模) 得到余数。10%3结果为1。

关系运算符

需要两个操作数参与。

操作数1 关系运算符 操作数2;

符号 含义
> 大于
< 小于
== 等于
!= 不等于
>= 大于等于
<= 小于等于

=表示赋值,==表示判断相等。

关系运算的结果,是一个布尔值。

1>0结果为true;
1==2结果为false;

==判断的是内存地址,

原始类型判断字面值是否相同时使用==判断,

引用类型判断字面值是否相同时尽量不要使用==

在判断字符串是否相等时,不能使用==,要使用**equals()**方法

字符串A.equals(字符串B)
这个方法的结果为一个布尔值。
如果两个字符串的值相同,得到true,否则得到false

逻辑运算符

表达式1 &&或|| 表达式2

!表达式 将原表达式取相反的结果

逻辑运算的结果为一个布尔值

1>0 && 3>2;			//true
1>0 && 3>20;		//false	   
1>0 || 3>20;		//true
1>10 || 2>20;		//false
!(1>0)				//false
!false				//true    
符号 含义 说明
&& 逻辑与and 符号两端的表达式都成立,整体结果才为true。(有设备且有游戏)
|| 逻辑或or 符号两端的表达式都不成立,整体结果才为false。(手机支付/现金支付)
逻辑非not 将原结果取相反的结果。属于单目运算符(只有一个操作数参与运算)。

补充:位运算符

符号 含义 说明
& 按位与 最终结果同&&
| 按位或 最终结果同||
^ 按位异或 转换为二进制后比较每一位,相同用0,不同用1,最终结果再转化为十进制。
>> 按位右移 转换为二进制后,从右向左移除指定数量的位数。
<< 按位左移 转换为二进制后,在最后补充指定数量的0.
//异或运算
System.out.println(3 ^ 4);//7
//3     011
//4     100 
//      111     7
//右移运算
System.out.println(5 >> 1);//2
//5		101
//  	10    	2
//左移运算
System.out.println(5 << 1);//10
//5		101
//		1010	10

注意

  • &&、||与&、|在最终的运算结果上是一致的。

  • &&是短路运算,如果第一个表达式不成立,不再执行第二个表达式。

  • ||是短路运算,如果第一个表达式已经成立,不再执行第二个表达式。

  • &和|是位运算,会将两个表达式都运行完后再判断最终的结果。

  • 程序中一般使用&&和||提高代码执行效率。

赋值、复合赋值运算符

复合赋值,是先将符号两侧作为整体进行=前的运算后,再将结果赋值给复合赋值符左侧的变量中。

a=a+b;等同于a+=b;
a*=b+c;等同于a=a*(b+c);
符号 含义 说明
= 将符号右边的值赋值给符号左边的变量。 int a=1;
+= 将符号两侧的内容先相加,再将结果赋值给符号左侧。 a+=b;相当于将a+b的值赋值给a
-= 将符号两侧的内容先相减,再将结果赋值给符号左侧。
*= 将符号两侧的内容先相乘,再将结果赋值给符号左侧。
/= 将符号两侧的内容先相除,再将结果赋值给符号左侧。
%= 将符号两侧的内容先求余,再将结果赋值给符号左侧。

自增自减运算符

属于单目运算符。

a++/++a最终的结果相当于a=a+1;

a--/--a最终的结果相当于a=a-1;

//这三句话的作用一样
i=i+1;
i+=1;
i++;
符号 含义
++ 对变量+1 a++;++a;
对变量-1 a–;–a;
public class Test4 {
    public static void main(String[] args) {
        //定义初始值
        int i = 10;
        //如果自增自减运算符单独成行出现,无论符号在前后,结果都是+1/-1
        //i++;
        //++i;
        //如果自增自减运算符配合其他代码一起使用时:
        //符号在前,先+1/-1计算,后使用
        //符号在后,先使用,后+1/-1计算
        //System.out.println(i++);
        /*
        int j=i++;//此时++在变量i后,先使用i的值10,赋值给j,再对i进行+1的操作。
        System.out.println(j);//j=10
        System.out.println(i);//i=11
        */
        /*
        int j=++i;//此时++在变量i前,先对i+1,将11赋值给j。
        System.out.println(j);//j=11
        System.out.println(i);//i=11
        */
        //System.out.println(i++ + i);//10+11
        //System.out.println(++i + i);//11+11
        //System.out.println(i++ + ++i);//10+12
        //System.out.println(i-- - --i);//10-8
    }
}

条件运算符

A?B:C 表达式1?表达式2:表达式3;

A,B,C为三个表达式,也称为三目运算符。

运算过程:先计算表达式1的结果,如果为true,执行?后的表达式2;如果为false,执行:后的表达式3。

相当于一个双分支条件语句。

分类 明细 说明
单目运算符 !/++/– 只有一个操作数参与运算
双目运算符 算术、关系、逻辑中的&&/|| 有两个操作数参与运算
三目运算符 ?: 有三个操作数参与运算

运算符的优先级

()>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>赋值/复合赋值运算

int num=10;
String result = (num % 3 == 0 || num % 10 == 3 || num / 10 == 3) ? "你输了!" : "你赢了!";
//上面的式子中,先运算() 中的内容
//再运算num % 3  、num % 10、num / 10
//再运算1==0  0==3  1==3
//再运算false||false||false  三个都为false,整体为false
//再运算 false? "你输了!" : "你赢了!" 
//最后进行赋值运算 "你输了!"赋值给result

条件语句

if语句

单分支if语句

if(判断条件){//判断条件的结果必须是布尔类型
    //条件成立时执行的内容。
}

双分支if语句

if(判断条件){
    //条件成立时执行的内容。
}else{
    //条件不成立时执行的内容。
}

多分支if语句

if(条件1){
    //条件1满足时执行
}else if(条件2){
    //条件2满足时执行
}...{
    //可以写任意个else if
}else{
    //以上所有条件都不满足时执行
}

如果一件事情有多个分支,不要使用多个并列的if语句,不只会影响效率,甚至会造成条件重叠。

使用多分支if语句即可避免,当某个条件成立时,不再判断其余条件

if嵌套

if(){
    if(){}else{}
}else if(){
    if(){}else{}
}else{
    if(){}else{}
}

switch语句

switch(要判断的变量){
    case 该变量有可能出现的值1:
        //满足时执行的内容
        break;
    case 该变量有可能出现的值2:
         //满足时执行的内容
        break;
    case 该变量有可能出现的值n:
         //满足时执行的内容
        break;
    default:
         //所有case都不满足时执行的内容
        break;
}

switch语句的注意事项

  • 小括号中变量的数据类型只能是非long的整型、字符型、字符串、枚举类型(在jdk1.7之后才支持字符串)
  • 如果有case的情况与判断的变量相匹配,则执行对应case后的内容;如果没有case匹配,执行default后的内容
  • case后可以不写break。如果没有break,在匹配的case执行后会继续执行下一个case后的内容,直到遇到break或没有代码可以执行为止。
  • 如果多个case后执行的内容都一样,可以省略break,将要做的内容写在最后满足的case后
 		Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期:");
        String week = sc.nextLine();
		switch (week) {
            case "一":
            case "二":
            case "三":
            case "四":
            case "五":
                System.out.println("今天上班");
                break;
            case "六":
            case "七":
                System.out.println("今天休息");
                break;
            default:
                System.out.println("输入有误");
                break;
        }

switch与if的选择

  • 如果条件能例举出来时,推荐使用switch
  • 如果条件是范围时,只能使用if
  • switch语句可以转换为if语句,if语句不一定能转换为switch

switch语句与if语句综合练习

import java.util.Scanner;
public class Test7 {
    public static void main(String[] args) {
        //输入年份和月份,输出这个月有多少天
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = sc.nextInt();
        System.out.println("请输入月份");
        int month = sc.nextInt();
        //定义天数默认为28
        int day = 28;
        //对月份进行判断
        switch (month) {
            //  1 3 5 7 8 10 12 都为31天
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            //  4 6 9 11        都为30天    
            case 4:
            case 6:
            case 9:
            case 11:
                day = 30;
                break;
            case 2:
                //  2   平年28天,闰年29年
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    day = 29;
                }
                break;
            default:
                day=0;
                System.out.println("月份输入有误");
                break;
        }
        System.out.println("有"+day+"天");
    }
}

五、总结与分析

   好好学习,天天向上。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术