Java中的运算符【与C语言的区别】

目录

1. 算术运算符

1.0 赋值运算符:=

1.1 四则运算符:+ - * / % 【取余与C有点不同】

1.2 增量运算符:+= -= *= /= %=

* 【右侧运算结果会自动转换类型】

1.3 自增、自减:++、--

2. 关系运算符

3. 逻辑运算符

3.1 短路求值

3.2 【非短路逻辑运算:&和 | 】

4. 位运算符

5. 移位运算符

5.1 左移<<

5.2 右移>>

5.3 无符号右移>>>

6. 条件运算符(三目运算符)

7. 对象类型检查运算符(instanceof运算符)

* 与C相比 · 失去或被重新定义的运算符


1. 算术运算符

1.0 赋值运算符:=

这个运算符用于变量的赋值和初始化,例如:

int a = 3;
int b;
b = 30;

1.1 四则运算符:+ - * / % 【取余与C有点不同】

计算机中基本四则运算是:加、减、乘、除、取余

 int a = 20;int b = 10;System.out.println(a + b);     // 30System.out.println(a - b);     // 10System.out.println(a * b);     // 200System.out.println(a / b);     // 2System.out.println(a % b);     // 0 --->模运算相当于数学中除法的余数

注意:

1. 都是二元运算符,使用时必须要有左右两个操作数

2. int / int 结果还是int类型,而且会向下取整

int a = 3;int b = 2;// 在数学中应该是1.5  但是在Java中输出结果为1  会向下取整,即小数点之后全部舍弃掉了
System.out.println(a / b);// 如果要得到数学中的结果,可以使用如下方式
double d = a*1.0 / b;System.out.println(d);

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

 int a = 1;int b = 0;System.out.println(a / b)// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zeroat Test.main(Test.java:5)

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

【在C语言中进行取余操作的两个操作数必须是整型

System.out.println(11.5 % 2.0);// 运行结果
1.5

5. 两侧操作数类型不一致时,向类型大的提升

System.out.println(1+0.2);   // +的左侧是int,右侧是double,在加之前int被提升为double// 故:输出1.2

1.2 增量运算符:+= -= *= /= %=

该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。

int a = 1;a += 2;                  
// 相当于 a = a + 2System.out.println(a);   // 输出3a -= 1;                  
// 相当于 a = a - 1System.out.println(a);   // 输出2a *= 3;                  
// 相当于 a = a * 3System.out.println(a);   // 输出6a /= 3;        
// 相当于 a = a / 3
System.out.println(a);   // 输出2a %= 3;                  
// 相当于 a = a % 2
System.out.println(a);   // 输出2

注意:只有变量才能使用该运算符,常量不能使用。

* 【右侧运算结果会自动转换类型】

如果对自己进行增量,却不用增量运算符的话,会发生类型不匹配的错误:

如果我们用增量运算符+=,这样做就不会报错:

运行结果:

其实使用增量运算符时,系统会自动将=右边的运算结果进行类型转换

比如上面的:

a += 2.6 + 2.8:

就相当于:

a = a + (int)(2.6 + 2.8);  

1.3 自增、自减:++、--

++是给变量的值+1,--是给变量的值-1。

 int a = 1;a++;    // 后置++   表示给a的值加1,此时a的值为2System.out.println(a++);   // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2System.out.println(a);     // 输出3++a;    // 前置++   表示给a的值加1System.out.println(++a);   // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5System.out.println(a);     // 输出5// --操作符给操作-1,与++含义类似

注意:

  1. 如果单独使用,【前置++】和【后置++】没有任何区别
  2. 如果混合使用,【前置++】先+1,然后使用变量+1之后的值【后置++】先使用变量原来的值,表达式结束时给变量+1
  3. 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

2. 关系运算符

关系运算符主要有六个:==等于、!=不等于、<大于、>小于、<=大于或等于、>=小于或等于 计算结果是 true 或者 false(计算结果是boolean类型) 

int a = 10;int b = 20;// 注意:在Java中 = 表示赋值,要与数学中的含义区分
//      在Java中 == 表示相等
System.out.println(a == b);       // falseSystem.out.println(a != b);       // trueSystem.out.println(a < b);        // trueSystem.out.println(a > b);        // falseSystem.out.println(a <= b);       // trueSystem.out.println(a >= b);       // false

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,要写成a > 3 && a < 5 。(Java程序与数学中是有区别的)

3. 逻辑运算符

逻辑运算符主要有三个:&& || !,运算结果都是 boolean类型,它们两侧的表达式也必须是布尔表达式

【C语言不要求左右两边的表达式一定是布尔表达式,在C中的(a && b),在Java中必须写成(a != 0 && b != 0)

1. 逻辑与 &&

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

逻辑与相当于现实生活中的且,比如:如果是学生,并且 带有学生证 才可以享受半票。 两个表达式都为真,结果才是真,只要有一个是假,结果就是假。

2. 逻辑或 || 

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

逻辑或相当于现实生活中的或,比如:买房子交钱时,全款 或者 按揭都可以,如果全款或者按揭,房子都是你的, 否则站一边去。

3. 逻辑非 ! 

语法规则:! 表达式

真变假,假变真。

3.1 短路求值

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

System.out.println(10 > 20 && 10 / 0 == 0);             // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0);             // 打印 true

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

注意:

  • 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  • 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式. 

3.2 【非短路逻辑运算:&和 | 】

&和 | 本身是两个位运算符,但如果单侧表达式结果为 boolean 时, 也表示逻辑运算.。

但与 && || 相比, 它们不支持短路求值

比如:

System.out.println(10 > 20 & 10 / 0 == 0);             // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0);             // 程序抛出异常

4. 位运算符

数据存储的最小单位是字节,而数据操作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

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

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.

1. 按位与 & 

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

int a = 10;
int b = 20;
System.out.println(a & b);

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

2. 按位或 | 

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

 int a = 10;int b = 20;System.out.println(a | b);

运算方式和按位于类似

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

3. 按位取反 ~ 

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

 int a = 0xf;System.out.printf("%x\n", ~a)

4. 按位异或 ^ 

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

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n", a ^ b);

5. 移位运算符

移位运算符有三个:> >>>,都是二元运算符,且都是按照二进制比特位来运算的。

5.1 左移<<

左移 <<:最左侧位不要了, 最右侧补 0.

 int a = 0x10;System.out.printf("%x\n", a << 1);// 运行结果(注意, 是按十六进制打印的)20

注意:向左移位时,丢弃的是符号位,因此正数左移可能会编程负数

5.2 右移>>

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

 int a = 0x10;System.out.printf("%x\n", a >> 1);// 运行结果(注意, 是按十六进制打印的)8int b = 0xffff0000;System.out.printf("%x\n", b >> 1);// 运行结果(注意, 是按十六进制打印的)ffff8000

5.3 无符号右移>>>

无符号右移 >>>:最右侧位不要了, 最左侧补 0.

【C语言中没有该操作符,但是有unsigned操作符,可以让数据无符号化】

 int a = 0xffffffff;System.out.printf("%x\n", a >>> 1);// 运行结果(注意, 是按十六进制打印的)7ffffff

注意: 

  1. 左移 1 位, 相当于原数字 * 2; 左移 N 位, 相当于原数字 * 2 的N次方. 
  2. 右移 1 位, 相当于原数字 / 2.;右移 N 位, 相当于原数字 / 2 的N次方. 
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替. 
  4. 移动负数位或者移位位数过大都没有意义.

6. 条件运算符(三目运算符)

条件运算符只有一个:表达式1 ? 表达式2 : 表达式3

运算规则:

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

也是 Java 中唯一的一个三目运算符, 是条件判断语句的简化写法。

// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;

注意:

1. 表达式2和表达式3的结果要同类型的,除非能发生类型隐式类型转换(或者主动强制类型转换)

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

7. 对象类型检查运算符(instanceof运算符)

作用:

该运算符用于操作对象实例,检查该对象是否为某一个特定类型或该类型的子类型(类类型或接口类型)。如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

注意事项

  • 只能用于对象引用变量:instanceof 运算符不能用于基本数据类型
  • 确保对象不为 null:在使用 instanceof 运算符时,需要确保对象引用变量不为 null,否则将抛出 NullPointerException 异常。
  • 结果为布尔值:instanceof 运算符的结果是一个布尔值,只能用于条件判断,不能用于赋值或其他操作

使用格式:

对象名 instanceof 类型名

例如:

String s = "Hello";
boolean re = s instanceof String; // 由于s就是String类型的,所以返回真

* 与C相比 · 失去或被重新定义的运算符

下标访问运算符[]、函数调用运算符()

这两种括号在Java语言中已经不再认为是运算符了。

  1. 但是数组中还是会用方括号[]来访问下标,[]已经和数组类型强绑定了;
  2. 调用方法时还是会用到小括号(),不过它不被定义为方法调用操作符。如果小括号()是运算符的话,它只能是类型转换运算符

Java语法这样规定的是为了让它们更具功能明确性。

解引用操作符*、成员间接访问操作符->

这两种符号在Java中已经不存在了

这个很好理解,Java语法中不存在指针,而这两种操作符是与指针相关的,自然就消失了。

成员直接访问操作符 . 

在Java中被称作对象成员访问操作符

这个操作符用于访问对象的属性(字段)和方法。例如,object.field用于访问对象objectfield属性,object.method()用于调用对象objectmethod()方法。此外,对于类的静态成员(包括静态变量和静态方法),可以使用类名后跟“.”操作符来引用,例如ClassName.staticFieldClassName.staticMethod()

该操作符符可以访问对象中的成员变量、方法……而C中的结构体和联合体只有成员变量,没有函数。

逗号表达式

Java中逗号的使用受到严格限制不能随意用逗号来分隔多条语句。所以不存在C语言中像“表达式1,表达式2,表达式3” 这样的用法。

Java中的逗号主要用于变量定义时的多重声明、for循环中的初始化部分、方法参数列表等。例如,int a = 0, b = 1;或者for (int i = 0, j = 10; i < j; i++, j--) { ... }


本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ

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

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

相关文章

目标检测:YOLOv11(Ultralytics)环境配置,适合0基础纯小白,超详细

目录 1.前言 2. 查看电脑状况 3. 安装所需软件 3.1 Anaconda3安装 3.2 Pycharm安装 4. 安装环境 4.1 安装cuda及cudnn 4.1.1 下载及安装cuda 4.1.2 cudnn安装 4.2 创建虚拟环境 4.3 安装GPU版本 4.3.1 安装pytorch&#xff08;GPU版&#xff09; 4.3.2 安装ultral…

HT7178 带输出关断的20V,14A全集成同步升压转换器

1、特点 输入电压范围VpIN:2.7V-20V 输出电压范围VouT:4.5V-20V 可编程峰值电流:14A 高转换效率: 95%(VPIN7.2V, VoUT 16V, IouT3A) 94%(VPIN12V,VoUT18V,IoUT4A) 90%(VPIN3.3, VoUT-9V,IOUT3A) 轻载条件下两种调制方式:脉频调制(PFM)和 强制脉宽调试(PWM) 集成输出关断的栅极…

使用axios请求分页

npm install axios <template><div><el-table :data"items" style"width: 100%"><el-table-column prop"id" label"ID" /><el-table-column prop"name" label"名称" /><!-- 添…

基于SpringBoot的在线医疗问答平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

codeforces _ 补题

C. Ball in Berland 传送门&#xff1a;Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a;容斥原理 考虑 第 i 对情侣组合 &#xff0c;男生为 a &#xff0c;女生为 b &#xff0c;那么考虑与之匹配的情侣 必须没有 a | b &#xff0c;一共有 k 对情侣&#x…

【Canvas与图标】长方形牛皮纸文件袋图标

【成图】 120*120的图标 大图 小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>长方文件袋图标</title>…

奔走相告! ClickHouse 全新构建了强大的 JSON 数据类型

本文字数&#xff1a;8969&#xff1b;估计阅读时间&#xff1a;23 分钟 作者&#xff1a;Pavel Kruglov 本文在公众号【ClickHouseInc】首发 简介 JSON 已成为现代数据系统中处理半结构化和非结构化数据的首选格式。无论是在日志记录和可观测性 (observability) 应用场景、实…

统信UOS下启动图形界面应用工具manager报错:No protocol specified的解决办法

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、问题情况 达梦提供了丰富的图形界面工具&#xff0c;包括&#xff1a;manager、monitor、dbca等&#xff0c;但在统信操作系统进入终端去启动manager时报错&#xff1a;No protocol specified。 咨询了达…

【CSS3】css开篇基础(6)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【设计模式系列】迭代器模式(七)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而不暴露其内部的表示。迭代器模式将集合的遍历过程封装在一个独立的迭代器对象中&#xff0c;这样…

Linux线程安全(二)条件变量实现线程同步

目录 条件变量 条件变量初始化和唤醒 键盘触发条件变量唤醒线程demo 条件变量的等待 条件变量定时等待demo 条线变量实现多线程间的同步 条件变量 条件变量是为了控制多个线程的同步工作而设计的 比如说一个系统中有多个线程的存在但有且仅有一个线程在工作&#xff0c…

数据结构---顺序表

文章目录 线性表顺序表的使用及其内部方法ArrayList 的扩容机制顺序表的几种遍历方式顺序表的优缺点顺序表的模拟实现杨辉三角扑克牌算法 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&a…

大模型,多模态大模型面试【LoRA,分类,动静态数据类型,DDPM,ControlNet,IP-Adapter, Stable Diffusion】

大模型&#xff0c;多模态大模型面试【LoRA&#xff0c;分类&#xff0c;动静态数据类型&#xff0c;DDPM&#xff0c;ControlNet&#xff0c;IP-Adapter, Stable Diffusion】 问题一&#xff1a;LoRA是用在节省资源的场景下&#xff0c;那么LoRA具体是节省了内存带宽还是显存呢…

【力扣刷题实战】相同的树

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 相同的树 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 示例 3&#xff1a; 解题思路 题目理解 算法选择 具体思路 解题要点 完整代码&#xff08;C语言&#xff09; 兄弟们共勉 &#…

2024年AI绘画与写作工具排行榜:提升创作效率必备利器推荐

2024年&#xff0c;AI绘画和写作工具迎来全新突破&#xff0c;从艺术创作到内容写作&#xff0c;越来越多的创作者开始依赖AI工具来提升效率、拓展创意。而随着市场上AI工具的增多&#xff0c;如何选择适合的工具变得尤为重要。今天为大家推荐一些提升创作效率的AI绘画和写作利…

沈阳乐晟睿浩科技有限公司抖音小店新篇章

在当今数字化时代&#xff0c;电商行业如雨后春笋般迅速崛起&#xff0c;其中抖音小店凭借其庞大的用户基础、精准的推荐算法和便捷的购物体验&#xff0c;成为了电商领域的新宠。在这场电商变革中&#xff0c;沈阳乐晟睿浩科技有限公司&#xff08;以下简称“乐晟睿浩”&#…

SQL语言基础

SQL(Struct Query Language)是结构化查询语言的简称&#xff0c;是一种在关系型数据库中定义和操纵数据的标准语言。 不要使用面向对象的思想学习SQL&#xff0c;因为它不是面向对象的语言目标 SQL语言简介(了解)从数据库数据检索数据(重点)子查询(重点)Oracle常用函数(掌握) …

VBox增强功能、VBoxLinuxAdditions安装、共享文件夹问题解决

VBox增强功能、VBoxLinuxAdditions安装、共享文件夹问题解决 文章目录 VBox增强功能、VBoxLinuxAdditions安装、共享文件夹问题解决1.VBoxLinuxAdditions.run&#xff1a;找不到命令解决方案 2.可以看到共享文件夹。但是不能看到里面的内容。解决方案 参考 共享文件夹设置&…

一、在cubemx下RTC配置调试实例测试

一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时&#xff0c;注意将时间信息存储起来&#xff0c;防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过&#xff0c;没有则进…

MySQL 复合索引测试

对MySQL复合索引结合具体示例&#xff0c;各条件下索引使用情况的运行结果及分析。 目录 复合索引示例 创建表 新增数据 查询数据 选项A SQL查询 explain分析 选项B SQL查询 explain分析 选项C SQL查询 explain分析 选项D SQL查询 explain分析 选项E SQL查询…