day04_java中的运算符

运算符概述

概念:对常量或者变量进行操作的符号。用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。

运算符按照其要求的操作数数目来分,可以有单目运算符(1 个操作数)、双目运算符(2 个 操作数)和三目运算符(3 个操作数)。

运算符按其功能来分,有算术运算符、赋值运算符、 关系运算符、逻辑运算符、位运算符、条件运算符等等

下面我们就来学习一下常用的运算符

算术运算符

Java中的算术运算符,如下图所示

实例

public class Demo {public static void main(String[] args) {//  + - * : 跟小学数学的运算方式一样System.out.println(10 + 20); // 30System.out.println(10 - 20); //-10System.out.println(10 * 20); // 200/*/ : 整数相除,结果只能得到整数,如果想要得到带有小数的结果,必须加入小数(浮点类型)的运算*/System.out.println(10 / 2);    // 5System.out.println(10 / 3);    // 3System.out.println(10 / 3.0);  // 3.3333333333333335/*%(取模) : 取余数 5 / 2 = 商2, 余数为1*/System.out.println(5 % 2);    // 1}}

“+”号的两种用法

  • 第一种:对于+两边都是数值的话,+就是加法的意思
public class Demo {public static void main(String[] args) {// char类型参与算术运算,使用的是计算机底层对应的十进制数值。char c = 'a';System.out.println(c+ 1);//98// 两边都是数值System.out.println(1+2);// 3System.out.println(1+1.2); //2.2}
}
  • 第二种:对于+两边至少有一边是字符串得话,+就是拼接的意思。+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
public class Demo {public static void main(String[] args) {int a = 5;//能算则算,不能算就拼接在一起。System.out.println("abc" + 'a'); // abcaSystem.out.println("abc" + a); // abc5System.out.println(5 + a); // 10System.out.println("abc" + 5 + 'a'); //abc5aSystem.out.println(15 + "abc" + 15); //15abc15System.out.println(a + 'a');//102System.out.println(a + "" + 'a');//5aSystem.out.println(a + 'a' + "it ");//102itSystem.out.println("it" + a + 'a');//it5aSystem.out.println("it" + (a + 'a'));//102it}
}

注意:

  • 和 的区别:两个数据做除法,/取结果的商,%取结果的余数。
  • 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

自增自减运算符

单独使用

变量在单独运算的时候,变量前++和变量后++,变量的是一样的;

  • 变量前++   :例如 ++a 
  • 变量后++   :例如 a++ 

实例:

public class Demo04Test {public static void main(String[] args) {/*单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的*/int a = 10;++a;   //等价于 a = a +1;System.out.println(a);        // 11int b = 10;--b;   //等价于 b = b -1;System.out.println(b);        // 9}}

复合使用

和其他变量放在一起使用或者和输出语句放在一起使用,前++和后++就产生了不同。

  • 变量前++ :变量先自身加1,然后再取值
  • 变量后++ :变量先取值,然后再自身加1

实例

/*参与操作:++在前: 先对该变量做自增(++)或者自减(--),然后再拿变量参与操作。++在后:	先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(--)。*/
public class Demo05Test {public static void main(String[] args) {// ++在前: 先对该变量做自增(++)或者自减(--),然后再拿变量参与操作。int a = 10;int b = ++a;System.out.println(a);		// 11System.out.println(b);		// 11// ++在后:	先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(--)。a = 10;b = a++;System.out.println(a);	// 11System.out.println(b);  // 10}
}

总结:

  • ++ 、-- 只能操作变量,不能操作字面量的。
  • 最常见的用法:单独使用

赋值运算符

赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。

基本赋值运算符 
/*
基本赋值运算符:	= : 将符号右侧的数据, 赋值给左边
*/
int a = 10; // 先看“=”右边,把数据10赋值给左边的变量a存储

扩展赋值运算符

实例

public class Demo06 {public static void main(String[] args) {int a = 3;int b = 4;b += a;// 相当于 b = b + a ;System.out.println(a); // 3System.out.println(b); // 7short s = 3;// s = s + 4; 代码编译报错,因为将int类型的结果赋值给short类型的变量s时,可能损失精度s += 4; //  此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 3);System.out.println(s); // 7}
}

注意:扩展的赋值运算符隐含了强制类型转换

关系运算符

关系运算符是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false,true)

 实例

/*关系运算符(比较运算符) 都有哪些呢?>	>=   <   <=   ==    !=
*/
public class Demo{public static void main(String[] args) {int a = 3;int b = 4;System.out.println(a < b); // trueSystem.out.println(a > b); // falseSystem.out.println(a <= b); // trueSystem.out.println(a >= b); // falseSystem.out.println(a == b); // falseSystem.out.println(a != b); // true}
}

注意事项:

  • 比较运算符,是两个数据之间进行比较的运算,运算结果一定是boolean值true或者false 
  • 其中>,<,>=,<=不支持boolean,String类型,==和!=支持boolean和String。

逻辑运算符

逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true false

逻辑运算符的特点

  • 操作数都是布尔类型,并且最终的运算结果也是布尔类型 

实例

/*逻辑运算符作用: 用于[整合]多个比较表达式的条件1. 连接多个比较表达式2. 连接true或false最终得到的结果都是boolean类型的true或false.
*/
public class Demo {/*逻辑运算符分类 :&(与) : 并且, 遇false则false, 只有符号左右两边同时为true, 结果才为true.|(或) : 或者, 遇true则true,   只有符号左边两边同时为false, 结果才为false!(非) : 取反^(异或) : 相同为false, 不同为true.*/public static void main(String[] args) {// &(与) : 并且System.out.println(true & true);        // trueSystem.out.println(false & false);        // falseSystem.out.println(true & false);        // falseSystem.out.println(false & true);        // falseSystem.out.println("------------------");// |(或) : 或者System.out.println(true | true);        // trueSystem.out.println(false | false);        // falseSystem.out.println(true | false);        // trueSystem.out.println(false | true);        // trueSystem.out.println("------------------");// !(非) : 取反System.out.println(!true);                // falseSystem.out.println(!!true);                // trueSystem.out.println("------------------");// ^(异或) :System.out.println(true ^ true);        // falseSystem.out.println(false ^ false);        // falseSystem.out.println(true ^ false);        // trueSystem.out.println(false ^ true);        // true}
}

短路逻辑运算符 


&&和&区别:

  • &&和&结果一样,&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。

||和|区别:

  • ||和|结果一样,||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。 

实例

/*
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,
没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。
同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算。
*/
public class Demo {public static void main(String[] args) {int a = 10;int b = 20;System.out.println(a > 100 && ++b > 10); // falseSystem.out.println(b); // 20int i = 10;int j = 20;System.out.println(i > 2 || ++j > 10); // trueSystem.out.println(j); // 20}
}

三元运算符

语法格式:

执行流程:

  1. 首先计算关系表达式的值
  2. 如果值为true, 取表达式1的值
  3. 如果值为false,取表达式2的值 

实例

public class Demo {/*声明三个整型的变量,a,b,c,要求找出最大值*/public static void main(String[] args) {// 1. 定义三个变量用于保存和尚的身高int a = 150;int b = 210;int c = 165;// 2. 用三元运算符 , 比较前两个变量,获取较大值。int tempMax = a > b ? a : b;// 3. 用三元运算符 , 让较大值和第三个变量比较,获取最大值。int max = tempMax > c ? tempMax : c;// 4. 输出结果System.out.println(max); // 210}
}

位运算符(了解)

  • 位运算符的运算过程都是基于补码运算,但是看结果,我们得换成原码,再换成十进制看结果
  • 从二进制到十进制都是基于原码
  • 正数的原码反码补码都一样,负数原码反码补码不一样
  • byte,short,char在计算时按照int类型处理
  • 如何区分&,|,^是逻辑运算符还是位运算符? 如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符

详解:

  • 左移:<<  左移几位就相当于乘以2的几次方
  • 右移:>> 类似于除以2的n次,如果不能整除,向下取整
  • 无符号右移:>>> 往右移动后,左边空出来的位直接补0,不看符号位
  • 按位与:& 对应位都是1才为1
  • 按位或:| 对应位只要有1即为1
  • 按位异或:^ 对应位一个为1一个为0,才为1
  • 按位取反:~0就是1 ~1就是0

运算符优先级

在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-” 。

实例

public class Demo {public static void main(String[] args) {// 目标:看看Java是否存在优先级,大家以后需要注意优先级问题System.out.println(10 > 3 || 10 > 3 && 10 < 3);  //trueSystem.out.println( (10 > 3 || 10 > 3 ) && 10 < 3); // false}
}

tips 

  • 表达式不要太复杂,如果不能确定优先级先算的使用小括号

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

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

相关文章

Docker 安装 PHP

Docker 安装 PHP 安装 PHP 镜像 方法一、docker pull php 查找 Docker Hub 上的 php 镜像: 可以通过 Sort by 查看其他版本的 php&#xff0c;默认是最新版本 php:latest。 此外&#xff0c;我们还可以用 docker search php 命令来查看可用版本&#xff1a; runoobrunoob:…

【Alibaba工具型技术系列】「EasyExcel技术专题」实战技术针对于项目中常用的Excel操作指南

这里写目录标题 EasyExcel教程Maven依赖 EasyExcel API分析介绍EasyExcel 注解通用参数ReadWorkbook&#xff08;理解成excel对象&#xff09;参数ReadSheet&#xff08;就是excel的一个Sheet&#xff09;参数注解参数通用参数 WriteWorkbook&#xff08;理解成excel对象&#…

机器视觉系统在汽车车轮毂检测上的应用

将机器视觉用于轮毂检测&#xff0c;可以利用图像分析的方法来测量轮毂特征尺寸、判断轮毂形状&#xff0c;并获取其位置坐标等信息&#xff0c;从而能够辨识流水生产线上的各种款式和型号的汽车轮毂。 市面上对汽车车轮毂具体检测要求如下 &#xff1a; 1.为了分辨流水线上…

EasyX图形化学习(三)

1.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …

Flutter:跨平台移动应用开发的未来

Flutter&#xff1a;跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包&#xff0c;用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布&#xff0c;并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…

Android Traceview 定位卡顿问题

Traceview 是一个 Android 性能分析工具&#xff0c;用于时间性能分析&#xff0c;主要帮助开发者了解应用程序中各个方法的执行时间和调用关系。通过图形化界面查看应用程序的代码执行细节&#xff0c;包括每个方法的调用次数、方法调用的时间消耗、方法调用堆栈等信息。我们可…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…

模具制造企业ERP系统有哪些?企业怎么选型适配的软件

模具的生产管理过程比较繁琐&#xff0c;涵盖接单报价、车间排期、班组负荷评估、库存盘点、材料采购、供应商选择、工艺流转、品质检验等诸多环节。 有些采用传统管理手段的模具制造企业存在各业务数据传递不畅、信息滞后、不能及时掌握订单和车间生产情况&#xff0c;难以对…

游戏《泰坦陨落2》msvcr120.dll丢失的多种解决方法分享

在Windows 11操作系统环境下&#xff0c;众多玩家在体验《泰坦陨落2》这款备受瞩目的射击游戏时&#xff0c;遭遇了一个令人困扰的技术问题&#xff1a;系统提示缺失msvcr120.dll文件。这一关键的动态链接库文件对于游戏的正常运行至关重要&#xff0c;它的缺失直接导致了《泰坦…

仓储的未来:为叉车配备智能设备

近年来&#xff0c;数字化和自动化极大地重塑了仓储行业。叉车是仓库的主力&#xff0c;正在配备智能设备以简化操作。 点击下载Dynamsoft最新版https://www.evget.com/product/3691/download 智能叉车的序列化艺术 序列化是为每个商品或托盘分配唯一标识符&#xff08;通常采…

shiro实战详解(2)

shiro实战详解&#xff08;2&#xff09; 03 Shiro入门1.身份认证1.1基本流程1.2案例 2.Realm2.1Realm接口2.2认证案例2.3认证授权案例 3.编码、散列算法3.1编码与解码3.2散列算法案例 4.身份授权5.Shiro默认过滤器5.1认证相关5.2授权相关 03 Shiro入门 1.身份认证 1.1基本流…

关于 mysql数据库应用程序登录卡顿无响应崩溃 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135682663 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

易基因:cfDNA甲基化在器官和组织损伤检测中的强大力量

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 检测器官和组织损伤对于早期诊断、治疗决策和监测疾病进展至关重要。由于DNA甲基化模式可以响应组织损伤而改变&#xff0c;甲基化检测提供了一种有前途的方法&#xff0c;在早筛早诊、疾…

HarmonyOS—开发环境诊断的功能

为了大家开发应用/服务的良好体验&#xff0c;DevEco Studio提供了开发环境诊断的功能&#xff0c;帮助大家识别开发环境是否完备。可以在欢迎界面单击Help > Diagnose Development Environment进行诊断。如果已经打开了工程开发界面&#xff0c;也可以在菜单栏单击Help >…

域环境权限提升

Windows系统配置错误 在Windows系统中&#xff0c;攻击者通常会通过系统内核溢出漏来提权&#xff0c;但是如果碰到无法通过系统内核溢出漏洞法国提取所在服务器权限的情况&#xff0c;就会系统中的配置错误来提权。Windows系统中常见哦欸之错误包括管理员凭证配置错误&#x…

享元模式介绍

目录 一、享元模式介绍 1.1 享元模式定义 1.2 享元模式原理 1.2.1 享元模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、享元模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 类图 2.2.2 具体实现 2.2.2.1 抽象享元类 2.2.2.2 共享享元类-白色棋子 2.2.2.3 共享享元…

《对话品牌》—广西南宁隆生达发电力科技有限公司

本期节目《对话品牌》栏目邀请到了广西南宁隆生达发电力科技有限公司董事长叶占广参加栏目录制&#xff0c;分享企业品牌故事&#xff0c;树立企业品牌形象&#xff0c;提升企业品牌价值&#xff01; 节目嘉宾&#xff1a;叶占广先生 节目主持人&#xff1a;吴昊 节目播出平…

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型&#xff08;如 Chinese-LLaMA、ChatGLM等&#xff09;的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…

【学习记录24】vue3自定义指令

一、在单vue文件中直接使用 1、html部分 <template><divstyle"height: 100%;"v-loading"loading"><ul><li v-for"item in data">{{item}} - {{item * 2}}</li></ul></div> </template> 2、js…

YOLOV7剪枝流程

YOLOV7剪枝流程 1、训练 1&#xff09;划分数据集进行训练前的准备&#xff0c;按正常的划分流程即可 2&#xff09;修改train.py文件 第一次处在参数列表里添加剪枝的参数&#xff0c;正常训练时设置为False&#xff0c;剪枝后微调时设置为True parser.add_argument(--pr…