Skip to content

1.算数运算符

运算符运算范例结果
+正号+77
-负号-11-11
+9+918
-10-82
*7*856
/9/91
%取模(取余)11%92
++自增(前):先运算后取值a=2;b=++aa=3;b=3
++自增(后):先取值后运算a=2;b=a++a=3;b=2
--自减(前):先运算后取值a=2;b=--aa=1;b=1
--自减(后):先取值后运算a=2;b=a--a=1;b=2
+字符串相加"aaa"+"bbb""aaabbb"

使用细节

  1. 对于除号"/",它的整数除和小数除是有区别的。整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x = 10 / 3,结果是3
  2. 当对一个数取模时,可以等价a%b=a-a/b*b
  3. 当自增当作一个独立语言使用时,不管是++i,还是i++;都是一样的。但是当作表达式使用的时候 ++i是先运算后赋值 i++是先赋值后运算

操作案例

java
ystem.out.println(10 / 4);//从数学来看是2.5,java中是2
System.out.println(10.0 / 4);//java是2.5
double d =10 / 4;//java中10/4=2,2=>2.0

/%的本质看一个公式!!!!a%b=a-a/b*b 
-10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
10 % -3 = 10 - 10 / (-3) * (-3) = 10 - 9 = 1
-10 % -3 = (-10) - (-10) / (-3) * (-3) = -10 + 9 = -1

//++的使用
int i = 10;
i++;//自增等价于i=i+1;=>i=11 
++i;//自增等价于i=i+1;=>i=12 
System.out.println("i="+i);//12

/*
作为表达式使用
前++:++i先自增后赋值
后++:i++先赋值后自增
*/
int j = 8;
int k = ++j;//等价j=j+1;k=j;
System.out.println("k=" + k + "j=" + j);//99
int k = j++;//等价k=j;j=j+1;
System.out.println("k=" + k + "j=" + j);//89

/**
运算步骤
temp = i;
i = i + 1;
i = temp;
*/
int i = 1; 
i = i++; 
System.out.println(i)//1

/**
运算步骤
i = i + 1;
temp = i;
i = temp;
*/
int i = 1; 
i = ++i; 
System.out.println(i)//2

2.关系运算符

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
  2. 关系表达式 经常用在if结构的条件中或循环结构的条件中
运算符运算范例结果
==相等于8 == 7false
!=不等于8 != 7true
<小于8 < 7false
>大于8 > 7true
<=小于等于8 <= 7false
>=大于等于8 >= 7true
instanceof检查是否是类的对象"aaa" instanceof Stringtrue

使用细节

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
  2. 关系运算符组成的表达式,我们称为关系表达式。 a > b
  3. 比较运算符"=="不能误写成"=

3.逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。 img_22.png

逻辑运算规则

  1. a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
  2. a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
  3. a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
  4. a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
  5. !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
  6. a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false

3.1 && 和 & 基本规则

相同点: 短路与&&和逻辑与& 都是两个条件为true,则结果为true 区别: 短路与&&:如果第一个条件是false,则第二个条件不会判断,最终结果为false 逻辑与&:不管第一个条件是不是false,都会判断第二个条件,效率低

java
//&&如果第一个条件是false,第二个条件将不会判断
int a = 4;
int b = 9;
if (a < 1 && b < 50){
    System.out.println("a=" + a + "b=" + b);//4 9
}

//对于&而言不管第一个条件是不是false 第二个条件都会判断
int a = 4;
int b = 9;
if (a < 1 & b < 50){
    System.out.println("a=" + a + "b=" + b);//4 10
}

3.2 || 和 |的区别

相同点: 短路或||与逻辑或|都是只要有一个条件为true,则结果就是true 不同点: ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高 | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低

java
int a = 4;
int b = 9;
if( a > 1 || ++b > 4) { // 可以换成 | 测试
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b); //4 10

3.3 取反操作

! 非(取反) !条件 如果条件本身成立,结果为 false,否则为 true

3.4 逻辑异或

a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false

3.5 练习题

例题一

java
int x = 5;
int y = 5;
if (x++ == 6 & ++y == 6){//逻辑与
    x = 11;
}
System.out.println("x = " + x + ", y = " + y); // 结果 6 6

例题二

java
int x = 5;
int y = 5;
if (x++ == 6 && ++y == 6){//短路与
    x = 11;
}
System.out.println("x = " + x + ", y = " + y); // 结果 6 5

例题三

java
int x = 5;
int y = 5;
if (x++ == 5 | ++y == 5){//逻辑或
    x = 11;
}
System.out.println("x = " + x + ", y = " + y); // 结果 11 6

例题四

java
int x = 5;
int y = 5;
if (x++ == 5 || ++y == 5){//短路或
    x = 11;
}
System.out.println("x = " + x + ", y = " + y); // 结果 11 5

例题五

java
boolean x = true;
boolean y = false;
short z = 46;
if (z++ == 46 && y = true){
    z++;
}
if (x = false || ++z = 49){
    z++;
}
System.out.println("z = " + z); // 结果 50

4.赋值运算符

基本赋值运算符 =
int a = 10;
复合赋值运算符
+= ,-= ,*= , /= ,%= 等 a += b; [等价 a = a + b; ] a -= b; [等价 a = a - b; ]

使用细节

  1. 运算顺序从右往左
    int num = a + b + c;
  2. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值 int num = 20; int num2= 78 * 34 - 10; int num3 = a;
  3. 复合赋值运算符等价于下面的效果 比如:a+=3;等价于 a=a+3; 其他类推
  4. 复合赋值运算符会进行类型转换 byte b = 2; b+=3; b++;

5.三元运算符

条件表达式 ? 表达式 1: 表达式 2;

运算规则

  1. 如果条件表达式为 true,运算后的结果是表达式 1;
  2. 如果条件表达式为 false,运算后的结果是表达式 2;

特点

  1. 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
  2. 三元运算符可以转成 if--else 语句

6.运算符优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
  2. 只有单目运算符、赋值运算符是从右向左运算的。
  3. 一览表, 不要背,使用多了,就熟悉了。 img_23.png

7.标识符的命名规则和规范

  1. 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
  2. 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰] 比如: TankShotGame
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小驼峰, 简称 驼峰法] 比如: tankShotGame
  4. 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
  5. 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.

标识符概念

  1. Java对各种变量、方法和类等命名时使用的字符序列称为标识符
  2. 凡是自己可以起名字的地方都叫标识符 int num1 = 90;

标识符命名规则

  1. 由26个英文字母大小写,0-9,或$组成
  2. 数字不可以开头。int 3ab = 1; //错误
  3. 不可以使用关键字和保留字,但能包含关键字和保留字
  4. Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
  5. 标识符不能包含空格。int a b = 90; //错误

8.关键字和保留字

被Java语言赋予了特殊含义,用做专门用途的字符串(单词),关键字中所有字母都为小写。 img_24.pngimg_25.png

保留字
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。 自己命名标识符时要避免使用这些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

9.键盘输入语句

java
import java.util.Scanner;//表示把 java.util 下的 Scanner 类导入
public class Input {
    //编写一个 main 方法
    public static void main(String[] args) {
        //演示接受用户的输入
        //步骤
        //Scanner 类 表示 简单文本扫描器,在 java.util 包
        //1. 引入/导入 Scanner 类所在的包
        //2. 创建 Scanner 对象 , new 创建一个对象,体会
        // 
        myScanner 就是 Scanner 类的对象
        Scanner myScanner = new Scanner(System.in);
        //3. 接收用户输入了, 使用 相关的方法
        System.out.println("请输入名字");
        //当程序执行到 next 方法时,会等待用户输入~~~ 
        String name = myScanner.next(); //接收用户输入字符串
        System.out.println("请输入年龄");
        int age = myScanner.nextInt(); //接收用户输入 int
        System.out.println("请输入薪水");
        double sal = myScanner.nextDouble(); //接收用户输入 double
        System.out.println("人的信息如下:");
        System.out.println("名字=" + name
        + " 年龄=" + age + " 薪水=" + sal);
    }
}

Released under the MIT License.