(六)Java 运算符

目录

一. 前言

二. 算术运算符

三. 关系运算符

四. 位运算符

五. 逻辑运算符

六. 赋值运算符

七. 其他运算符

7.1. 条件运算符(三元运算符)

7.2. instanceof 运算符

八. Java 运算符优先级

九. 课后习题


 

一. 前言

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java 也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符。

二. 算术运算符

    算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。

表格中的实例假设整数变量 A 的值为10,变量 B 的值为20:

操作符描述例子
+加法:相加运算符两侧的值A + B等于30
-减法:左操作数减去右操作数A – B等于-10
*乘法:相乘操作符两侧的值A * B等于200
/除法:左操作数除以右操作数B / A等于2
取模:左操作数除以右操作数的余数B%A等于0
++自增:操作数的值增加1B++ 或 ++B 等于 21
--自减:操作数的值减少1B-- 或 --B 等于 19

虽然都是自增(他们的运算结果都是等于 B+1),但 B++ 和 ++B 还是有所区别,++B 是左值,直接原地操作(可以理解为直接在变量 B 上+1),B++ 是右值,在编译器中运算的时候会先构建一个临时变量,用临时变量运算+1后再赋值给 B。

所以,在下面实例代码中,打印 d++ 的时候发现结果并没有+1(这个时候打印的是 d 这个变量,运算的是 d 的临时变量),但是后一条打印的语句显示的结果又是+1后的结果(临时变量的值赋给变量 d 了)。而打印 ++d 的结果是直接+1的。

代码实例:

下面的简单示例程序演示了算术运算符。复制并粘贴下面的 Java 程序并保存为 Test.java 文件,然后编译并运行这个程序:

public class Test {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));System.out.println("b % a = " + (b % a));System.out.println("c % a = " + (c % a));System.out.println("a++   = " +  (a++));System.out.println("a--   = " +  (a--));// 查看  d++ 与 ++d 的不同System.out.println("d++   = " +  (d++));System.out.println("d     = " +  d);System.out.println("++d   = " +  (++d));}
} 
// 运行结果:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++   = 10
a--   = 11
d++   = 25
d     =26
++d   = 27

三. 关系运算符

下表为 Java 支持的关系运算符。

表格中的实例整数变量 A 的值为10,变量 B 的值为20:

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B) 为假(非真)。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B) 非真。
检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B) 为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B) 为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B) 为真。

代码实例:

下面的简单示例程序演示了关系运算符。复制并粘贴下面的 Java 程序并保存为 Test.java文件,然后编译并运行这个程序:

public class Test {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("a == b = " + (a == b));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));System.out.println("b <= a = " + (b <= a));} 
}  
// 运行结果:
a == b = false
a != b = true
a > b = false
a < b = true 
b >= a = true
b <= a = false 

四. 位运算符

    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

下表列出了位运算符的基本运算,假设整数变量 A 的值为60和变量 B 的值为13:

操作符描述例子
按位与操作符,当且仅当两个操作数的某一位都非0时候结果的该位才为1。(A&B),得到12,即0000 1100
|按位或操作符,只要两个操作数的某一位有一个非0时候结果的该位就为1。(A | B) 得到61,即 0011 1101
^按位异或操作符,两个操作数的某一位不相同时候结果的该位就为1。(A ^ B) 得到49,即 0011 0001
按位补运算符翻转操作数的每一位。(〜A) 得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2 得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2 得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2 得到15即0000 1111

代码实例:

下面的简单示例程序演示了位运算符。复制并粘贴下面的 Java 程序并保存为 Test.java 文件,然后编译并运行这个程序:

public class Test {public static void main(String[] args) {int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */int c = 0;c = a & b;       /* 12 = 0000 1100 */System.out.println("a & b = " + c );c = a | b;       /* 61 = 0011 1101 */System.out.println("a | b = " + c );c = a ^ b;       /* 49 = 0011 0001 */System.out.println("a ^ b = " + c );c = ~a;          /*-61 = 1100 0011 */System.out.println("~a = " + c );c = a << 2;     /* 240 = 1111 0000 */System.out.println("a << 2 = " + c );c = a >> 2;     /* 215 = 1111 */System.out.println("a >> 2  = " + c );c = a >>> 2;     /* 215 = 0000 1111 */System.out.println("a >>> 2 = " + c );}
} 
// 运行结果:
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240 
a >> 2 = 15
a >>> 2 = 15

五. 逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量 A 为真,变量 B 为假:

操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B) 为假。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B) 为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B) 为真。

代码实例:

下面的简单示例程序演示了逻辑运算符。复制并粘贴下面的 Java 程序并保存为 Test.java 文件,然后编译并运行这个程序:

public class Test {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));}
} 
// 运行结果:
a && b = false
a || b = true
!(a && b) = true

六. 赋值运算符

下面是 Java 语言支持的赋值运算符:

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B 将把 A + B 得到的值赋给 C
+=加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C += A 等价于 C = C + A
-=减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C -= A 等价于 C = C -
 A
*=乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C *= A 等价于 C = C * A
/=除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C /= A 等价于 C = C / A
%=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C %= A 等价于 C = C % A
<<=左移位赋值运算符C <<= 2 等价于 C = C << 2
>>=右移位赋值运算符C >>= 2 等价于 C = C >> 2
&=按位与赋值运算符C &= 2 等价于 C = C&2
^=按位异或赋值操作符C ^= 2等价于 C = C ^ 2
|=按位或赋值操作符C |= 2 等价于 C = C | 2

代码实例:

下面的简单示例程序演示了赋值运算符。复制并粘贴下面的 Java 程序并保存为 Test.java 文件,然后编译并运行这个程序:

public class Test {public static void main(String[] args) {int a = 10;int b = 20;int c = 0;c = a + b;System.out.println("c = a + b = " + c);c += a ;System.out.println("c += a  = " + c);c -= a ;System.out.println("c -= a = " + c);c *= a ;System.out.println("c *= a = " + c);a = 10;c = 15;c /= a ;System.out.println("c /= a = " + c);a = 10;c = 15;c %= a ;System.out.println("c %= a  = " + c);c <<= 2 ; System.out.println("c <<= 2 = " + c); c >>= 2 ;System.out.println("c >>= 2 = " + c);c >>= 2 ;System.out.println("c >>= a = " + c);c &= a ;System.out.println("c &= a = " + c);c ^= a ;System.out.println("c ^= a = " + c);c |= a ;System.out.println("c |= a = " + c);}
} 
// 运行结果:
c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20 
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10

七. 其他运算符

7.1. 条件运算符(三元运算符)

    条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

variable x = (expression) ? value if true : value if false

代码实例:

public class Test {public static void main(String[] args) {int a, b;   a = 10;    b = (a == 1) ? 20: 30;    System.out.println("Value of b is : " +  b);b = (a == 10) ? 20: 30;    System.out.println("Value of b is : " + b);}
}
// 运行结果:
Value of b is : 30
Value of b is : 20

7.2. instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

instanceof 运算符使用格式如下:

(Object reference variable) instanceof (class/interface type)

如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

下面是一个例子:

String name = 'James';
boolean result = name instanceof String; // 由于name是String类型,所以返回真

如果被比较的对象兼容于右侧类型,该运算符仍然返回 true。

看下面的例子:

class Vehicle {}public class Car extends Vehicle {public static void main(String[] args) {Vehicle a = new Car();boolean result = a instanceof Car;System.out.println(result);}
}

 

// 运行结果:
true

八. Java 运算符优先级

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

例如,(1+3) + (3+2) * 2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。

再如,x = 7 + 3 * 2;这里 x 得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算 3 * 2 得到 6,然后再加7。

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

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

九. 课后习题

1. 定义三个整型变量 a、b、c,他们的初始值分别为4、15、20。对表达式进行运算。

2. 接收命令行参数年、月、日,判断这一天是当年的第几天。(判断一年是否是闰年的标准:可以被4整除,但不可被100整除;可以被400整除)

3. 利用三元运算符求任意三个数中最大者。

4. 将任意一个三位数的个位、十位、百位分别输出。

5. 若任意两数和是3的倍数或其中一个为3,则输出 true,否者输出 false。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pix2Pix如何工作?

一、说明 在本指南中&#xff0c;我们将重点介绍 Pix2Pix [1]&#xff0c;它是用于配对图像翻译的著名且成功的深度学习模型之一。在地理空间科学中&#xff0c;这种方法可以帮助传统上不可能的广泛应用&#xff0c;在这些应用中&#xff0c;我们可能希望从一个图像域转到另一个…

vue3基础知识一,安装及使用

一、安装vue3 需要安装node&#xff0c;然后在项目所在目录命令行执行以下代码。 npm create vuelatest 回车后需要配置以下内容。 二、安装所需的依赖包并运行 cd到项目目录&#xff0c;执行以下代码安装依赖包 npm i 运行项目 npm run dev 打开浏览器查看结果 ok&#…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

【sql】MyBatis Plus中,sql报错LIKE “%?%“:

文章目录 一、报错详情&#xff1a;二、解决&#xff1a;三、扩展&#xff1a; 一、报错详情&#xff1a; 二、解决&#xff1a; 将LIKE “%”#{xxx}"%"改为LIKE CONCAT(‘%’, #{xxx}, ‘%’) 三、扩展&#xff1a; MyBatis Plus之like模糊查询中包含有特殊字符…

爬虫详细教程第1天

爬虫详细教程第一天 1.爬虫概述1.1什么是爬虫&#xff1f;1.2爬虫工具——Python1.3爬虫合法吗&#xff1f;1.4爬虫的矛与盾1.4.1反爬机制1.4.2反爬策略1.4.3robots.txt协议 2.爬虫使用的软件2.1使用的开发工具: 3.第一个爬虫4.web请求4.1讲解一下web请求的全部过程4.2页面渲染…

如何协调建筑技术集成、互操作性和安全性

尽管进行了大量时间和精力的准备和执行&#xff0c;但建筑集成通常无法按预期或根据需要进行工作&#xff0c;无法满足日益常见的能源报告要求或组织可持续发展目标。 当谈到运营技术 (OT) 部署的最终状态时&#xff0c;“这不是我所要求的”这句话太常见了。在许多情况下&…

每个AI/ML工程师必须了解的人工智能框架和工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

1分钟带你了解golang(go语言)

Golang&#xff1a;也被称为Go语言&#xff0c;是一种开源的编程语言&#xff0c;由Google的Robert Griesemer、Rob Pike和Ken Thompson于2007年发明。 被誉为21世纪的C语言。 像python一样的优雅&#xff0c;有c一样的性能天生协程天生并发编译快… 编辑器&#xff1a;golan…

固定本机在局域网中的 IP 地址

说明&#xff1a;以将 IP 地址固定为 192.168.1.107 为例 Step1、打开终端&#xff0c;输入以下命令查看网络信息&#xff1a; ipconfig -all 记住子网掩码、默认网关、DNS 服务器&#xff08;首选和备用&#xff09;信息&#xff0c;后面要用&#xff1a; Step2、进入 “控制…

mac上使用Navicat Premium 在本地和生产环境中保持数据库同步

Navicat Premium 是一款功能强大的数据库管理和开发工具&#xff0c;支持多种数据库系统&#xff0c;如 MySQL、Oracle、SQL Server 等。作为程序员&#xff0c;我深知在开发过程中需要一款方便、高效的数据库管理工具来提升工作效率。而 Navicat Premium 正是这样一款不可多得…

windows go环境安装 swag

windows 下载依赖包 go get github.com/swaggo/swag/cmd/swag编译swag cd $GOPATH\pkg\mod\github.com\swaggo\swagv1.16.2\cmd\swagps: go env 获取 GOPATH位置 go installps: 此时 $GOPATH\bin下出现了 swag.exe 项目根目录下执行swag 初始化 swag init生成结果

swing快速入门(三十四)输入对话框

&#x1f33c;注释很详细&#xff0c;直接上代码 &#x1f337;新增内容 &#x1f940;字符串输入型 输入对话框用法 &#x1f940;下拉选项输入型输入对话框用法 &#x1fab4;完整代码&#xff1a; package swing31_40;import javax.swing.*; import java.awt.*; import ja…

【已解决】若依系统前端打包后,部署在nginx上,点击菜单错误:@/views/system/role/index

​ 上面错误&#xff0c;是因为/views/system/role/index动态路由按需加载时候&#xff0c;错误导致。 解决办法&#xff1a; 如果您的前端项目访问时候&#xff0c;需要带有项目名称的话&#xff0c;参考凯哥上一篇文章&#xff1a;【已解决】若依前后端分离版本&#xff0…

【Linux】Linux 下基本指令 -- 详解

无论是什么命令&#xff0c;用于什么用途&#xff0c;在 Linux 中&#xff0c;命令有其通用的格式&#xff1a; command [-options] [parameter] command&#xff1a;命令本身。-options&#xff1a;[可选&#xff0c;非必填]命令的一些选项&#xff0c;可以通过选项控制命令的…

YOLOv8主干改进 更换柱状神经网络RevCol

一、Reversible Column Networks论文 论文地址:2212.11696.pdf (arxiv.org) 二、Reversible Column Networks结构 Reversible Column Networks 是一种用于量子计算的新型结构。它由一系列可逆操作组成,可以在量子计算中进行高效的信息传递和处理,具有可扩展性、灵活性、…

2.2数据通信的基础知识

目录 2.2数据通信的基础知识2.2.1数据通信系统的模型数据通信常用术语 2.2.2 有关信道的几个基本概念&#xff08;1)常用编码方式(2)基本的带通调制方法 2.2.3 信道的极限容量&#xff08;1&#xff09;信道能够通过的频率范围&#xff08;2&#xff09;信噪比练习 2.2数据通信…

Git:常用命令(一)

取得项目的Git 仓库 从当前目录初始化 1 git init 初始化后&#xff0c;在当前目录下会出现一个名为.git 的目录&#xff0c;所有Git 需要的数据和资源都存放在这个目录中。不过目前&#xff0c;仅仅是按照既有的结构框架初始化好了里边所有的文件和目录&#xff0c;但我们还…

电池管理系统BMS中SOC算法通俗解析(二)

下面简单介绍下我们BMS保护板使用的SOC估算方法。我们算法的主要是针对电流积分法计算SOC的局限性进行改进&#xff1a; ●电池包第一次上电使用开路电压法估算SOC。第一次上电&#xff0c;根据电池包厂家给出的电压和剩余容量二维关系图大概估算出目前电池包的剩余容量即SOC。…

Java中的MD5加密详解

一、MD5加密简介 MD5&#xff08;Message Digest Algorithm 5&#xff0c;信息摘要算法5&#xff09;是一种被广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保信息传输…

Qt学生信息管理系统(Qt+DataBase)

项目简介 一个简单的学生管理系统&#xff0c;适合初学者 主要知识点&#xff1a; Qt如何进行数据库连接&#xff1f;&#xff08;本项目使用的是SQLite3&#xff0c;也可以根据需要自行更改数据库类型&#xff0c;或者增加一个选择数据库的页面&#xff08;源代码基础上拓展…