OddFar's Notes OddFar's Notes
首页
  • Java-Se

    • Java基础
    • Java面向对象
    • Java常用类
    • Java集合框架
  • Java-Se进阶

    • JUC多线程
  • Java-ee

    • JavaWeb
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • 中间件

    • RabbitMQ
  • Git
  • Docker
  • Jenkins
爬虫
  • Campus (opens new window)
  • 校园信息墙 (opens new window)
关于
归档
GitHub (opens new window)
首页
  • Java-Se

    • Java基础
    • Java面向对象
    • Java常用类
    • Java集合框架
  • Java-Se进阶

    • JUC多线程
  • Java-ee

    • JavaWeb
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • 中间件

    • RabbitMQ
  • Git
  • Docker
  • Jenkins
爬虫
  • Campus (opens new window)
  • 校园信息墙 (opens new window)
关于
归档
GitHub (opens new window)
  • java-基础

    • 初识java
    • 基础语法

      • 注释
      • 标识符
      • 数据类型
      • 类型转换
      • 变量和常量
      • 运算符
        • 运算符
          • 1、二元运算符
          • 2、取模运算
          • 3、一元运算符
          • 4、逻辑运算符
          • 5、位运算符
          • 6、扩展运算符
          • 7、字符串连接符
          • 8、三目条件运算符
          • 9、运算符优先级
      • 包机制
      • JavaDoc
    • 流程控制

    • 方法
    • 数组
    • 异常机制
  • java-面向对象

  • Java-常用类

  • Java-集合框架

  • Java-多线程

  • JavaWeb

  • Java
  • java-基础
  • 基础语法
zhiyuan
2021-04-15
目录

运算符

# 运算符

运算符operator

Java 语言支持如下运算符:

  • 算术运算符 +,-,*,/,%,++,--
  • 赋值运算符 =
  • 关系运算符 >,<,>=,<=,==,!= instanceof
  • 逻辑运算符 &&,||,!
  • 位运算符 &,|,^,~ , >>,<<,>>> (了解!!!)
  • 条件运算符 ?:
  • 扩展赋值运算符 +=,-=,*=,/=

# 1、二元运算符

两个操作数,来看看我们小时候的数学运算;

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int c = 25;
    int d = 25;
    System.out.println("a + b = " + (a + b) );
    System.out.println("a - b = " + (a - b) );
    System.out.println("a * b = " + (a * b) );
    System.out.println("b / a = " + (b / a) );
}
1
2
3
4
5
6
7
8
9
10

整数运算

如果两个操作数有一个为Long, 则结果也为long

没有long时,结果为int。即使操作数全为shot,byte,结果也是int.

public static void main(String[] args) {
    long a = 1231321311231231L;
    int b = 1213;
    short c = 10;
    byte d = 8;

    System.out.println(a + b + c + d); //Long类型
    System.out.println(b + c + d);//Int类型
    System.out.println(c + d);//Int类型
}
1
2
3
4
5
6
7
8
9
10

浮点运算

如果两个操作数有一个为double, 则结果为double

只有两个操作数都是float, 则结果才为float

public static void main(String[] args) {
    float a = 3.14565F;
    double b = 3.194546464;
    float c = 1.3123123F;
    System.out.println(a+b); //double类型
    System.out.println(b+c); //double类型
    System.out.println(a+c); //float类型
}
1
2
3
4
5
6
7
8

关系运算符

返回布尔值!

image-20210327143549464

可参考 菜鸟教程 (opens new window)

# 2、取模运算

就是我们小学的取余;

5%3 余 2

其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.000000004

要点:

负数%负数=负数;

负数%正数=负数;

正数%负数=正数;

public static void main(String[] args) {
    System.out.println(9 % 4); //1
    System.out.println(-9 % -4); //-1
    System.out.println(-10 % 4); //-2
    System.out.println(9 % -4); //1
}
1
2
3
4
5
6

【注:一般都是正整数运算,进行结果的判断!】

# 3、一元运算符

自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算, 而自增自减运算符是一个操作数,分为前缀和后缀两种。

public static void main(String[] args) {
    int a = 3;
    int b = a++; //执行完后,b=3。先给b赋值,再自增。
    int c = ++a; //执行完后,c=5。先自增,再给b赋值
}
1
2
3
4
5

注意:java中的乘幂处理

public static void main(String[] args) {
    int a = 3^2; //java中不能这么处理, ^是异或符号。
    double b = Math.pow(3, 2);
}
1
2
3
4

Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法!

# 4、逻辑运算符

逻辑与:&&和& 逻辑或:||和| 逻辑非:!

image-20210327144148985

【演示】

public static void main(String[] args) {
    boolean a = true;
    boolean b = false;
    System.out.println("a && b = " + (a&&b));
    System.out.println("a || b = " + (a||b) );
    System.out.println("!(a && b) = " + !(a && b));
}
1
2
3
4
5
6
7

逻辑与 和 逻辑或 采用短路的方式。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为 true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断 第二个操作了。

逻辑与只要有一个为false, 则直接返回false.

逻辑或只要有一个为true, 则直接返回true;

public static void main(String[] args){
    int a = 5;//定义一个变量;
    boolean b = (a<4)&&(a++<10);
    System.out.println("使用短路逻辑运算符的结果为"+b);
    System.out.println("a的结果为"+a);
}
1
2
3
4
5
6

解析: 该程序使用到了短路逻辑运算符(&&),首先判断 a<4 的结果为 false,则 b 的结果必定是 false, 所以不再执行第二个操作 a++<10 的判断,所以 a 的值为 5。

# 5、位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型 (byte)等类型。位运算符作用在所有的位上,并且按位运算。

假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
1
2
3
4
5
6
7

image-20210327144737549

右移一位相当于除2取商。

左移一位相当于乘2。

【常见面试题:int a=2*8怎样运算效率最快?】

public static void main(String[] args) {
    System.out.println(2 << 3);
}
1
2
3

用移位运算 int a=2<<3; a就是2乘以8 最后结果是16 这是最省内存 最有效率的方法

这个方法确实高效率的。我来解释一下: 2的二进制是10 在32位存储器里面是0000 0000 0000 0010 左移三位后变成 0000 0000 0001 0000 也就是16

解释一下,在系统中运算是以二进制的形式进行的。相比来说俩个二进制数相乘运算比移位运算慢一 些。

位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。 在现代架构中, 情况并非如此:位运算的运算速度 通常与加法运算相同(仍然快于乘法运算). 详细的需要了解计算机的组成原理!

# 6、扩展运算符

image-20210327150556669

public static void main(String[] args) {
    int a=10;
    int b=20;
    
    a+=b; // a = a + b
    
    System.out.println(a+":"+b);
}
1
2
3
4
5
6
7
8

# 7、字符串连接符

“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串 然后再进行连接。

//字符串
String s1="Hello 中文!";
String s2=1+""; //转换成String
//int
int c = 12;
System.out.println("c=" + c);
1
2
3
4
5
6

# 8、三目条件运算符

三目条件运算符,语法格式:

x ? y : z

其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。

【演示】

public static void main(String[] args) {
    int score = 80;
    String type = score < 60 ? "不及格" : "及格";
    System.out.println("type= " + type);
}
1
2
3
4
5

三元运算符在真实开发中十分的常见,大家可以多练习使用,之后我们会讲解分支语句,可以利用三元运算符做到更加精简代码!便于理解!

# 9、运算符优先级

我们小学都学过:先加减,后乘除,所以优先级我们并不陌生。

当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别 操作符 关联性
后缀 () [] . (点操作符) 左到右
一元 expr++ expr-- 从左到右
一元 ++expr --expr + - ~ ! 从右到左
乘性 * /% 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 > >= < <= 左到右
相等 == != 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 | | 左到右
条件 ?: 从右到左
赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
逗号 , 左到右

大家不需要去刻意的记住,表达式里面优先使用小括号来组织!!方便理解和使用,不建议写非常冗余 的代码运算!

public static void main(String[] args) {
    boolean flag = 1<4*5&&122>3||'q'+3<5;
    System.out.println(flag);
}
1
2
3
4

#

在 GitHub 上编辑此页 (opens new window)
最后更新: 2023/03/26, 13:03:00
变量和常量
包机制

← 变量和常量 包机制→

Theme by Vdoing | Copyright © 2021-2023 oddfar | 冀ICP备20001094号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式