当前位置: 首页 > news >正文

Java奠基】运算符的讲解与使用

目录

运算符与表达式的使用

算术运算符

隐式转换与强制转换

自增自减运算符

赋值运算符

关系运算符

逻辑运算符

三元运算符


运算符与表达式的使用

运算符是指:对字面量或者变量进行操作的符号。

表达式是指:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式。

算术运算符

算术运算符包括:加(+)、减(-)、乘(*)、除(\)、取余(%)。

public class Main {public static void main(String[] args) {System.out.println(1+1); // 2System.out.println(2-1); // 1System.out.println(2*4); // 8System.out.println(10/3); // 对整数进行相除,得到的还是整数System.out.println(10%3); // 1System.out.println(10.0/3); // 小数参与计算得到的结果可能不准确}
}

当 " + " 操作中出现字符串时,这个 " + " 是字符串连接符,而不是算术运算符了,会将前后的数据进行拼接,并产生一个新的字符串。

public class Main {public static void main(String[] args) {// 当字符串和数字同时出现时,用 + 表示拼接System.out.println("123"+123);// 当连续出现多个 + 的操作时,且有字符串的话,会先进行算数运算,其次然后拼接System.out.println(10+12+"123"); // 10+12=22 22与123拼接}
}

字符 char 进行 + 的操作时,会把字符通过 ASCII 码表查询到对应的数字再进行计算。

public class Main {public static void main(String[] args) {// 对char进行+操作char A = 'a'; // a在ASCII表中代表的是97int B = 0;System.out.println(A+B); // 97+0还是97}
}

隐式转换与强制转换

数字进行运算时,数据类型不一样是不能进行运算的,需要转成相同类型才能继续运算。而这里需要借助隐式转换和强制转换。

隐式转换:也叫自动类型提升,把取值范围小的数值变成取值范围大的。

public class Main {public static void main(String[] args) {int a = 10;double b = 3.0;System.out.println(a+b); // 将数值小的int 转换成double并参与运算// 注意:byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算byte x = 10;byte y = 20;System.out.println(x+y); // 将byte类型转换成int再进行运算}
}

总结:

取值范围

byte < short < int < long < float < double

转换时机

数据类型不一样,不能进行运算,需要转成一样的才可以进行计算

转换规则

取值范围小的和取值范围大的进行运算,小的会先提升为大的,再进行运算;byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。

强制转换:把取值范围大的数值变成取值范围小的。

其格式如下:目标数据类型 变量名 = (目标数据类型)被强转的数据。

public class Main {public static void main(String[] args) {byte b1 = 12;byte b2 = 24;byte result = (byte)(b1+b2);byte result1 = (byte)(b1*10+b2^10); // byte的取值范围为:-128~127System.out.println(result);System.out.println(result1); // 结果就发生错误了,因为要转换的数据过大。}
}

自增自减运算符

符号作用说明
++变量的值加1
--变量的值减1

++和--既可以放在变量的前面,也可以放在变量的后面;无论是放在前面还是后面,单独写一行结果都是一样的。

public class Main {public static void main(String[] args) {int a = 10;a++;System.out.println(a); // 11++a;System.out.println(a); // 12a--;System.out.println(a); // 11--a;System.out.println(a); // 10}
}

当然前置++和--与后置++和--,在实际运算中是有一些区别的,一般后置用的比较多,如下:

public class Main {public static void main(String[] args) {int a = 10;int b = a++; // 先用后加System.out.println(a); // 11System.out.println(b); // 10int x = 10;int y = ++x; // 先加后用System.out.println(x); // 11System.out.println(y); // 11}
}

赋值运算符

符号作用说明
=赋值int a = 10,将10赋值给变量a
+=加后赋值a+=b,将a+b的值给a
-=减后赋值a-=b,将a-b的值给a
*=乘后赋值a*=b,将a*b的值给a
/=除后赋值a/=b,将a/b的商给a
%=取余后赋值a%=b,将a/b的余数给a

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

public class Main {public static void main(String[] args) {int a=10,b=20;a+=b;b/=a;System.out.println(a); // a = a+b=30System.out.println(b); // b = b / a = 2/3 = 0}
}

关系运算符

关系运算符也叫比较运算符,其主要分类如下:

符号说明
==a==b,判断a和b的值是否相等,成立为true,不成立为false
!=a!=b,判断a和b的值是否不相等,成立为true,不成立为false
>a>b,判断a是否大于b,成立为true,不成立为false
>=a>=b,判断a是否大于等于b,成立为true,不成立为false
<a<b,判断a是否小于b,成立为true,不成立为false
<=a<=b,判断a是否小于等于b,成立为true,不成立为false
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入第一个整数:");int i = sc.nextInt();System.out.println("请输入第二个整数:");int j = sc.nextInt();if(i>j){System.out.println("相亲成功!");}else{System.out.println("相亲失败!");}}
}

逻辑运算符

符号作用说明
&逻辑与(且)并且,两边都为真,结果才为真
|逻辑或或者,两边都为假,结果才为假
^逻辑异或相同为false,不同为true
!逻辑非取反
public class Main {public static void main(String[] args) {// 逻辑与System.out.println(true & false); // falseSystem.out.println(true & true); // true// 逻辑或System.out.println(true | false); // trueSystem.out.println(false | false); // false// 逻辑异或System.out.println(true ^ true); // falseSystem.out.println(true ^ false); // true// 逻辑非 System.out.println(!true); // falseSystem.out.println(!false); // true}
}

两种特殊的逻辑运算符—短路运算符

短路与:&&,结果与 & 相同,但有短路效果。

短路或:|| ,结果与 | 相同,但有短路效果。

短路运算符具有短路效果:当左边的表达式能确定最终结果,那么右边便不会再参与运行了

三元运算符

三元运算符也称三元表达式,类似于if-else的简写形式,其基本格式如下:

关系表达式 ? 表达式1 : 表达式2;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("第一个人的体重:");int i = sc.nextInt();System.out.println("第二个人的体重:");int j = sc.nextInt();String result = i == j ? "体重相同" : "体重不同";System.out.println(result);}
}

相关文章:

Java奠基】运算符的讲解与使用

目录 运算符与表达式的使用 算术运算符 隐式转换与强制转换 自增自减运算符 赋值运算符 关系运算符 逻辑运算符 三元运算符 运算符与表达式的使用 运算符是指&#xff1a;对字面量或者变量进行操作的符号。 表达式是指&#xff1a;用运算符把字面量或者变量连接起来&…...

开发一个会员管理系统

背景 由于现在公司内客户量剧增&#xff0c; 简单的靠电话及笔记本记录&#xff0c;来维护客户有些困难&#xff0c;但又不想去花钱购买那些专业版的会员管理系统&#xff0c;只能自己动手撸一个相对简易的会员系统来使用了。 开发语言及使用技术 后端&#xff1a;java、mys…...

华为OD机试题【找出通过车辆最多颜色】用 C++ 进行编码 (2023.Q1)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明找出通…...

如何根据子网掩码计算出网络前缀(prefix)

我们知道子网掩码是对IP地址的网络地址的标注。把IP地址中网络地址位设置为1,主机地址位设置为0,得到的就是子网掩码。除了用子网掩码表示IP地址的网络地址和主机地址外,还可以用network prefix(网络前缀),比如192.168.0.1/16,这里的16就是prefix,也就是网络地址位的位…...

【FATE联邦学习】Fateboard的使用

fateboard文档 https://fate.fedai.org/fateboard/ github Fateboard文档 https://github.com/FederatedAI/FATE-Board/blob/master/README-CN.md 背景 Fateboard是FATE框架的任务看板。 在配置FATE时&#xff0c;Fateboard一般是被安装好了的&#xff0c;安装过程查看这里 A…...

解决vue3没有this造成的无法使用vue2

在Vue2项目中可以使用this.$router.push等方法进行路由的跳转&#xff0c;但是在Vue3的setup函数里&#xff0c;并没有this这个概念&#xff0c;因此如何使用路由方法 1.// 在新的vue-router里面尤大加入了一些方法&#xff0c;比如这里代替this的useRouter&#xff0c;具体使用…...

百度前端二面vue面试题指南

Vue 组件间通信有哪几种方式&#xff1f; ​ Vue 组件间通信是面试常考的知识点之一&#xff0c;这题有点类似于开放题&#xff0c;你回答出越多方法当然越加分&#xff0c;表明你对 Vue 掌握的越熟练。Vue 组件间通信只要指以下 3 类通信&#xff1a;父子组件通信、隔代组件通…...

【备战面试】每日10道面试题打卡-Day1

本篇总结的是Java基础知识相关的面试题&#xff0c;后续也会更新其他相关内容 文章目录1、JVM、JRE和JDK的关系&#xff1f;2、Java语言有哪些特点&#xff1f;3、Java和C的区别有哪些&#xff1f;4、Java有哪些数据类型&#xff1f;5、访问修饰符 public、private、protected&…...

服务器重启后jar包自动重启

1、创建自动启动脚本 vi /etc/rc.d/auto_start_script.sh #!/bin/bash #添加本地Java环境&#xff0c;这两句必须添加&#xff01;不然报错&#xff0c;找不到java命令 export JAVA_HOME/java/jdk1.8.0_181 export PATH$JAVA_HOME/bin:$PATH #系统引导后延迟5秒执行脚本&#x…...

Ubuntu 交叉编译工具链安装

Ubuntu 交叉编译工具链安装 1 交叉编译器安装 ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译&#xff0c;编译就需要编译器&#xff0c;我们在第三章“Linux C 编程入门”里面已经讲解了如何在 Liux 进行 C 语言开发&#xff0c;里面使用 GCC 编译器进行代…...

Vue3中ref、reactive、toRef、toRefs基本用法和区别

ref、reactivesetup 函数中默认定义的变量并不是响应式的&#xff08;即数据变了以后页面不会跟着变&#xff09;&#xff0c;如果想让变量变为响应式的变量&#xff0c;需要使用 ref 和 reactive 函数修饰变量。区别&#xff1a;reactive只能传入对象类型的参数&#xff0c;所…...

python hash 不一致踩坑总结

背景 在线上的一次模型对照实验中&#xff0c;发现对同一个用户进行 hash 分流时&#xff0c;会生成不同的 random 值&#xff0c;导致实验数据污染 原因 参考&#xff1a;https://www.zhihu.com/question/57526436 python 的字符串 hash 算法并不是直接遍历字符串每个字符去…...

qt5.15 快速安装 国内源

1 qt5.15 安装问题 最大的问题就是需要在线下载与安装。即使挂了科学上网&#xff0c;国外的服务器下载速度也还是超级慢。 在网上找了各种解决办法后&#xff0c;终于找到一个快速下载安装的办法。 2 安装器下载 阿里源、清华源都没有Windows的安装器了&#xff0c;在腾讯…...

JavaScript 对象

文章目录JavaScript 对象所有事物都是对象JavaScript 对象访问对象的属性访问对象的方法创建 JavaScript 对象创建直接的实例使用对象构造器创建 JavaScript 对象实例把属性添加到 JavaScript 对象把方法添加到 JavaScript 对象JavaScript 类JavaScript for...in 循环JavaScrip…...

数据库设计三大范式

数据库设计遵循三大范式的理由&#xff1a;在面对复杂是数据库设计的时候&#xff0c;设计数据库要遵循一定的规则&#xff0c;有了一定的规范&#xff0c;这样就可以是自己看起来舒服。 1&#xff0e;第一范式(确保每列保持原子性) 第一范式主要是保证数据表中的每一个字段的…...

cesium学习记录02-vue项目中cesium的配置与使用

1&#xff0c;下载cesium包 &#xff08;当然&#xff0c;使用npm install cesium安装也是可以的&#xff0c;不过在这里选择下载包放到本地&#xff09; 官方下载地址 笔者的cesium版本为1.101 2&#xff0c;将下载的Cesium文件夹放到项目里某个位置 这里&#xff0c;笔者将…...

【微服务】-认识微服务

目录 1.1 单体、分布式、集群 单体 分布式 集群 1.2 系统架构演变 1.2.1 单体应⽤架构 1.2.2 垂直应⽤架构 1.2.3 分布式架构 1.2.4 SOA架构 1.2.5 微服务架构 1.3 微服务架构介绍 微服务架构的常⻅问题 1.4 SpringCloud介绍 1.4.1 SpringBoot和SpringCloud有啥关…...

容器的线程安全性

&#xff08;1&#xff09;c的map、vector等容器以及go中的slice、map都不是线程安全的。 &#xff08;2&#xff09;线程安全&#xff1a;多线程访问执行n次每次结果都是确定的 &#xff08;3&#xff09;保证线程安全&#xff1a;同步 &#xff08;4&#xff09;c同步相关…...

如何用Postman测试整套接口?测试流程是什么?

目录 基于postman测试接口(整套接口测试) 可以解决的问题 开启控制台 单个测试尝试 使用请求结果当参数 打印结果(JSON) 自定义可视化结果 随机参数 测试用例连接 一键测试接口集合 从swagger导入接口 自定义全局变量 总结感谢每一个认真阅读我文章的人&#xff01…...

【批处理脚本】-2.1-测试IP连接命令ping

"><--点击返回「批处理BAT从入门到精通」总目录--> 共4页精讲(列举了所有ping的用法,图文并茂,通俗易懂) ping是用来检查网络是否通畅,或者网络连接速度的命令。 目录 1 ping命令解析 1.1 Ping 指定的主机...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...