初识java(三):运算符

目录

一:什么是运算符

二:算术运算符

[1. 基本四则运算符:加减乘除模(+ - * / %)](#1. 基本四则运算符:加减乘除模(+ - * / %))

[2.增量运算符 += -= *= %=](#2.增量运算符 += -= *= %=)

[3. ⾃增/⾃减运算符 ++ --](#3. ⾃增/⾃减运算符 ++ --)

三:关系运算符

四:逻辑运算符(重点)

1.逻辑与&&

[2.逻辑 ||](#2.逻辑 ||)

[3.逻辑⾮ !](#3.逻辑⾮ !)

4.短路求值

五:位运算符

[1. 按位与&:](#1. 按位与&:)

[2. 按位或 | :](#2. 按位或 | :)

[3. 按位取反~:](#3. 按位取反~:)

[4. 按位异或^:](#4. 按位异或^:)

六:移位运算(了解)

1.左移<<

2.右移>>

[3.⽆符号右移 >>>](#3.⽆符号右移 >>>)

七:条件运算符

八:运算符的优先级


内容概况:

本文详细介绍了Java中的各类运算符及其使用方法。主要内容包括:

1)算术运算符(+、-、*、/、%等)的使用规则和注意事项;

2)关系运算符(==、!=、>、<等)的布尔值返回特性;

3)逻辑运算符(&&、||、!)的运算规则和短路求值特性;

4)位运算符(&、|、~、^)的二进制位操作;

5)移位运算符(<<、>>、>>>)的位移规则;

6)条件运算符(?:)的三目运算特性。

文章还强调了运算符优先级问题,建议在复杂表达式中使用括号明确运算顺序。这些运算符是Java编程的基础,掌握它们对编写正确高效的程序至关重要。

一:什么是运算符

计算机的最基本的⽤途之⼀就是执⾏数学运算,⽐如:

int a = 10; int b = 20;

a + b;

a < b;

上述 + 和 < 等就是运算符 ,即:对操作数进⾏操作时的符号,不同运算符操作的含义不同。 作为⼀⻔计算机语⾔,Java也提供了⼀套丰富的运算符来操纵变量。Java中运算符可分为以下:算术 运算符**(+ - * /)** 、关系运算符**(< > ==)**、逻辑运算符、位运算符、移位运算符以及条件运算符等。

二:算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

代码如下:

java 复制代码
  public static void main(String[] args) {
        int a = 20;
        int b = 10;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a % b);
        
    }

输出:

注意:

1.模运算相当于数学中除法的余数

2.都是⼆元运算符,使⽤时必须要有左右两个操作数

3.int/int结果还是int类型,⽽且会向下取整(和C语言差不多)

看代码:

java 复制代码
public static void main(String[] args) {
        int a = 3;
        int b = 2;
        System.out.println(a / b);//1
    }

结果:

和C语言一样,整型变量的除法,会自动去除小数点,保留整数位

如果想要得出小数点后面的数字,我们需要浮点型 来进行计算**(和C语言也是一样的)**

java 复制代码
   public static void main(String[] args) {
        int a = 3;
        int b = 2;
        double d = a*1.0 / b;
        System.out.println(d);
    }

结果:

4.做除法和取模时,右操作数不能为0

看代码:

java 复制代码
 public static void main(String[] args) {
        int a = 1;
        int b = 0;
        System.out.println(a / b)
    }

结果会报错:

5. %不仅可以对整型取模,也可以对double类型取模,但是没有意义,⼀般都是对整型取模的

看代码:

java 复制代码
 public static void main(String[] args) {
        System.out.println(11.5 % 2.0);
    }

结果是1.5

6.两侧操作数类型不⼀致时,向类型⼤的提升

看代码:

整型变量1和浮点型变量0.2,注意这里会变量提升,小的int会提升为double类型的数

java 复制代码
 public static void main(String[] args) {
        System.out.println(1+0.2);
    }

结果是1.2:

2.增量运算符 += -= *= %=

该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。(和C语言一样)

看代码:

java 复制代码
   public static void main(String[] args) {
        int a = 1;
        a += 2;
        System.out.println(a);

        a -= 1;
        System.out.println(a);

        a *= 3;
        System.out.println(a);

        a /= 3;
        System.out.println(a);

        a%=3;
        System.out.println(a);

    }

结果:

注意:增量运算符在计算的时候,可以不进⾏强制类型转换

double a = 10.4;

int b = 10;

b += a; // 不会报错

b = b + a; // 此时会编译报错,等号右边被提升为了 double 类型,放入了int类型,所以会报错

3. ⾃增/⾃减运算符 ++ --

++是给变量的值+1,--是给变量的值-1**(和C语言一样)**

这里就举例加法,减法就不演示了

前置++(先加1再使用)

看代码:

java 复制代码
  public static void main(String[] args) {
        int a=1;
        System.out.println(a);//1
     
        System.out.println(++a); //2
    }

结果:

后置++(先使用再+1)

看代码:

java 复制代码
    public static void main(String[] args) {
        int a= 1;
        System.out.println(a);

        System.out.println(a++);

        System.out.println(a);

    }

结果是1 1 2:

注意:

• 如果单独使⽤,【前置++】和【后置++】没有任何区别

• 如果混合使⽤,【前置++】先+1,然后使⽤变量+1之后的值,【后置++】先使⽤变量原来的值, 表达式结束时给变量+1

• 只有变量才能使⽤⾃增/⾃减运算符,常量不能使⽤,因为常量不允许被修改

三:关系运算符

关系运算符主要有六个:== != < > = ,其计算结果是true 或者false

看代码:

java 复制代码
   public static void main(String[] args) {
        int a = 10;
        int b = 20;

        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a < b);
        System.out.println(a > b);

        System.out.println(a <= b);
        System.out.println(a >= b);
    }

结果只能是true或者false :

注意:

当需要多次判断时,不能连着写,比如3<a<5,这是错误的写法,只能拆开一个一个写

四:逻辑运算符(重点)

逻辑运算符主要有三个: && || ! 运算结果都是boolean类型

1.逻辑与&&

一句话:同为真,才是真,否则为假

  1. 语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果

  2. 相当于现实⽣活中的且,⽐如:如果是学⽣,并且带有学⽣证才可以享受半票。

  3. 两个表达式都为真,结果才是真,只要有⼀个是假,结果就是假。

看图:

代码演示:

java 复制代码
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2);
        System.out.println(a == 1 && b > 100);
        System.out.println(a > 100 && b == 2);
        System.out.println(a > 100 && b > 100);
    }

结果:

2.逻辑 ||

一句话: 同为假,才是假,否则为真

语法规则:表达式1||表达式2,左右表达式必须是boolean类型的结果。

相当于现实⽣活中的或,⽐如:买房⼦交钱时,全款或者按揭都可以,如果全款或者按揭,房⼦都是 你的,否则站⼀边去。

看图:

代码演示:

java 复制代码
   public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a == 1 || b == 2);
        System.out.println(a == 1 || b > 100);
        System.out.println(a > 100 || b == 2);
        System.out.println(a > 100 || b > 100);
    }

结果:

3.逻辑⾮ !

语法规则:! 表达式

真变假,假变真

看图(不演示代码了):

4.短路求值

&&和||遵守短路求值的规则

说白了就是,当你前面的一个表达式已经可以判断最终的答案的时候,后面的也就不会再去判断了

看代码:

java 复制代码
   public static void main(String[] args) {
        System.out.println(10 > 20 && 10 / 0 == 0);
        System.out.println(10 < 20 || 10 / 0 == 0);
    }

结果:

我们都知道,计算10 / 0 会导致程序抛出异常,但是上⾯的代码却能正常运⾏,说明10 / 0并没有真正被求值.

注意:
1.对于&&,如果左侧表达式值为false,则表达式结果⼀定是false,⽆需计算右侧表达式.

2.对于||,如果左侧表达式值为true,则表达式结果⼀定是true,⽆需计算右侧表达式.

3.& 和 | 如果表达式结果为boolean时,也表⽰逻辑运算.但与&& || 相⽐,它们不⽀持短路求值.

看代码:

java 复制代码
   public static void main(String[] args) {
        System.out.println(10 > 20 & 10 / 0 == 0);
        System.out.println(10 < 20 | 10 / 0 == 0);
    }

结果会报错:

五:位运算符

Java 中数据存储的最⼩单位是字节,⽽数据操作的最⼩单位是⽐特位.字节是最⼩的存储单位,每个 字节是由8个⼆进制⽐特位组成的,多个字节组合在⼀起可以表⽰各种不同的数据。

位运算符主要有四个:& | ~ ^,除 ~ 是⼀元运算符外,其余都是⼆元运算符。

位操作表⽰按⼆进制位运算.计算机中都是使⽤⼆进制来表⽰数据的(01构成的序列),按位运算就是在 按照⼆进制位的每⼀位依次进⾏计算.

1. 按位与&:

如果两个⼆进制位都是1,则结果为1,否则结果为0

**一句话概括:**同为1则为1,否则为0

这里的内部计算过程我就不解释了,和C语言的一模一样,原码、反码、补码等

看代码:

java 复制代码
   public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a & b);
    }

结果是0:

进⾏按位运算,需要先把10和20转成⼆进制,分别为1010和10100

看图:

2. 按位或 | :

如果两个⼆进制位都是0,则结果为0,否则结果为1.

一句话:同为0则为0,否则是1

看代码:

java 复制代码
   public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a | b);
    }

结果是30:

运算⽅式和按位于类似,看图:


注意:

当&和|的操作数为整数(int,short,long,byte)的时候,表⽰按位运算,当操作数为boolean的 时候,表⽰逻辑运算.

3. 按位取反~:

如果该位为0则转为1,如果该位为1则转为0

这里就不演示了,和C语言一样

4. 按位异或^:

如果两个数字的⼆进制位相同,则结果为0,相异则结果为1

一句话:相同为0,否则为1

六:移位运算(了解)

移位运算符有三个: << >> >>>,都是⼆元运算符,且都是按照**⼆进制**⽐特位来运算的。

1.左移<<

最左侧位不要了,最右侧补0**(和C语言一样)**

注意:

向左移位时,丢弃的是符号位,因此正数左移可能会变成负数。

2.右移>>

最右侧位不要了,最左侧补符号位(正数补0,负数补1)

3.⽆符号右移 >>>

最右侧位不要了,最左侧补0

注意:

1. 左移1位,相当于原数字*2.左移N位,相当于原数字*2的N次⽅.【针对正数⽽⾔】

2. 右移1位,相当于原数字/2.右移N位,相当于原数字/2的N次⽅.【针对正数⽽⾔】

3. 由于计算机计算移位效率⾼于计算乘除,当某个代码正好乘除2的N次⽅的时候可以⽤移位运算代 替.【针对正数⽽⾔】

4. 移动负数位或者移位位数过⼤都没有意义.

思考:如果是负数进⾏左移和右移,怎么计算结果?

七:条件运算符

条件运算符只有⼀个:

表达式 1 ? 表达式 2 : 表达式 3

当表达式 1 的值为true时,整个表达式的值为 表达式 2 的值;

当表达式 1 的值为false时,整个表达式的值为 表达式 3 的值.

也是Java中唯⼀的⼀个三⽬运算符,是条件判断语句的简化写法.

看代码:

java 复制代码
  public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int max = a > b ? a : b;
        System.out.println(max);
    }

结果是20:

注意:

1. 表达式2和表达式3的结果要是同类型的,除⾮能发⽣类型隐式类型转换

看代码:

java 复制代码
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = a > b? 1 : 2.0;
    }

结果会报错:

2. 表达式不能单独存在,其产⽣的结果必须要被使⽤。

看代码:

java 复制代码
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a > b? a : b;
    }

结果会报错,原因是,没有把最终的值放入一个变量里面去:

八:运算符的优先级

在⼀条表达式中,各个运算符可以混合起来进⾏运算,但是运算符的优先级不同,⽐如:*和/的优先 级要⾼于+和-,有些情况下稍不注意,可能就会造成很⼤的⿇烦

注意:

运算符之间是有优先级的.具体的规则我们不必记忆.在可能存在歧义的代码中加上括号即可

以上就是全部内容了!!!!!!!!!

相关推荐
爱喝水的鱼丶1 小时前
SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程(四篇连载)第四篇:ADT连接故障排查与环境迁移教程
运维·开发语言·数据库·学习·sap·abap
爱吃提升1 小时前
Yifan Hu(适合大规模数据)大数据算法
开发语言·算法·php
c++之路1 小时前
装饰器模式(Decorator Pattern)
java·开发语言·装饰器模式
Yolo566Q1 小时前
环境土壤物理模型HYDRUS1D/2D/3D实践技术应用系统性学习
大数据·开发语言·gpt·学习·arcgis·r语言
Alson_Code1 小时前
Spring Ai Alibaba
java·人工智能·spring
计算机安禾1 小时前
【c++面向对象编程】第5篇:类与对象(四):赋值运算符重载
java·前端·c++
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第45题】【JVM篇】第5题:JVM中,对象何时会进入老年代?
java·开发语言·jvm·后端·面试
hanbr1 小时前
C++ 类型转换与异常处理全解析
开发语言·c++