【Java学习笔记】三、运算符,表达式、分支语句和循环语句
运算符与表达式
算数运算符与算数表达式
- 加减运算符
- 操作数:2
- 结合方向:从左到右
- 优先级:4级
- 乘(*)、除(/)和取余(%)运算符
- 操作数:2
- 结合方向:从左到右
- 优先级:3级
用算术运算符连接起来的符合Java语法规则的式子称为算数表达式
自增自减运算符
- 操作数:2
- 和C语言中的自增自减运算符一样,自增自减运算符可以放在操作元素的前面或者后面,作用也和C语言中的一样,前置则先执行++或–,后使用操作元素的值,后置则先使用操作元素的值,后执行++或–
算术混合运算的精度
精度从低到高的排序是:byte short char int long float double
在Java中计算算术表达式的值时,使用以下的精度运算规则:
- 如果表达式中有双精度浮点数,按双精度进行计算
- 如果表达式的最高精度是单精度浮点数,则按单精度进行运算
- 如果表达式中的最高精度是long型,则按long精度进行运算
- 如果表达式中的最高精度低于int型,则按int型精度进行运算
Java允许把不超出byte、short、char的取值范围的常量算术表达式的值赋给byte、short和char型变量
byte x = (byte)30+'a';是正确的,byte x = (byte)30+'b;是错误的
当赋值号右边的表达式中有变量时,编译只检查变量的类型,不检查变量中的值。例如,byte x = 97 + 1和byte y = 1都是正确的,但是byte z = 97 + y是错误的,这是因为表达式右侧按int进行运算,不检查y中的值,所以会提示类型不兼容
关系运算符与关系表达式
关系运算符是二目运算符,用来比较两个值的关系。关系运算符的运算结果是boolean,当运算符对应的关系成立时,结果为true,否则为false
| 运算符 | 优先级 | 结合方向 |
|---|---|---|
| > | 6 | 从左到右 |
| < | 6 | 从左到右 |
| >= | 6 | 从左到右 |
| <= | 6 | 从左到右 |
| == | 7 | 从左到右 |
| != | 7 | 从左到右 |
逻辑运算符和逻辑表达式
逻辑运算符包括&& || !
&& 、||为二目运算符,实现逻辑与、逻辑或
!为单目运算符,实现逻辑非
逻辑表达式的操作元必须是boolean型数据
| 运算符 | 优先级 | 结合方向 |
|---|---|---|
| && | 11 | 从左到右 |
| || | 12 | 从左到右 |
| ! | 2 | 从右到左 |
结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式,和C语言不同,Java不能用零或非零表示true或false,所以不能用常量或整数型变量作为逻辑运算符的操作元,例如,以下两种写法都是错误的
public class test{public static void main(String argv[]){byte x = (byte)30+'a';if(1)System.out.println(x);}
}

public class test{public static void main(String argv[]){byte x = (byte)30+'a';if(x)System.out.println(x);}
}

逻辑运算符&& ||也称为短路逻辑运算符,因为当op1的值是false时,&&运算符就不再去计算op2的值,无论op2是true或false,表达式op1&&op2的结果都是false;当op1的值是true时,||运算符就不再去计算op2的值,无论op2是true或false,表达式op1||op2的结果都是true。合理的利用短路运算可以提高程序运行效率
位运算符
整型数据在内存中以二进制的方式表示,最高位为符号位,位运算符就是对整型数据对每个二进制分别进行位操作
位运算符包括:按位与&、按位或|、按位非!、按位异或^
- 按位与就是将左右两个操作元的对应每一位进行与&操作,都为1则结果为1,有一个是0则结果为0
- 按位或就是将左右两个操作元的对应每一位进行或|操作,有一个操作元的该位为1则结果为1,均为零则结果为零
- 按位非就是按位取反,将操作数的每一位0变1,1变0
- 按位异或就是对两个操作元每个二进制位进行异或操作,相同为0,相异为1
instanceof运算符
instanceof运算符是二目操作符,左边的操作元是一个对象,右边是一个类,当左边的对象是右边类或子类创建的对象时,运算结果为true,否则为false
总结
| 优先级 | 运算符 | 结合方向 |
|---|---|---|
| 1 | [] () . , ; | |
| 2 | instanceof 、 ++ 、- - 、 ! | 从右到左 |
| 3 | * / % | 从左到右 |
| 4 | +、- | 从左到右 |
| 5 | >> 、<<、 >>> | 从左到右 |
| 6 | < 、<=、 >、 >= | 从左到右 |
| 7 | == 、!= | 从左到右 |
| 8 | & | 从左到右 |
| 9 | ^ | 从左到右 |
| 10 | | | 从左到右 |
| 11 | && | 从左到右 |
| 12 | || | 从左到右 |
| 13 | ?: | 从右到左 |
| 14 | = | 从右到左 |
分支语句
语法上看,Java的分支语句和C语言的分支语句几乎完全相同
if条件分支语句
if语句
if语句是单条件、单分支语句
if(表达式)
{
语句
}
if后的表达式的值必须为boolean型,同样不能像C语言一样使用零或非零表示
如果表达式为true则执行花括号后的语句,否则不执行
如果语句只有一条,可以省略花括号,建议写上,保持良好的代码风格
if-else语句
if-else语句是单条件、双分支语句
if(表达式1)
{语句1;
}
else
{语句2;
}
if-else语句同样需要表达式为boolean型,如果值为true则执行语句1,否则执行语句2
if-else if-else语句
if-else if-else语句是多条件、多分支语句
if(表达式1)
{语句1;
}
else if(表达式2)
{语句2;
}
else
{语句3;
}
-
若表达式1为true,则执行语句1;
-
若表达式1为false,判断表达式2,
- 若表达式2为true,执行语句2,
- 若表达式2为false,执行语句3
如果有更多的if-else语句也是同理,逐次向下判断表达式的值,直到有一个值为true或所有的值均为false,然后执行else
switch
switch语句是单条件、多分支的开关语句
switch(表达式){case 常量值1:若干语句break;case 常量值2:若干语句break;......case 常量值n:若干语句break;default:若干语句
}
switch语句中,表达式的值可以是byte short int char String类型,但不可以是long型
switch语句首先计算表达式的值,如果表达式的值与某个case后的常量值相同,就执行该case后面的语句,直到遇到break退出,如果没有break语句,那么会继续执行后面其他case后的语句。如果表达式的值与任何case都不相同,则执行default后的语句,default是可选的,如果没有default,并且表达式的值不与任何的常量值相同,那么switch语句就不会进行任何处理
循环语句
语法上看,Java的循环语句和C语言的循环语句基本相同,但Java中没有goto语句
for循环
for ( i = 0; i < length; i++)
{ //初始化 // 判断 //调整语句;//循环体
}
1.for后面的括号中包括三个内容,依次为:对变量的初始化 循环条件判断 对某些变量的调整(一般是控制循环退出的变量)两两之间用分号间隔2.上述三项内容中,初始化可省略(不建议),可在初始化处定义新变量,但只能在循环内使用该变量3.for循环条件判断可由多个变量控制,用&&(与)||(或)分割4.若省略循环条件判断,会使判断恒成立,进入死循环5.有两条及以上语句时,需加大括号6.循环体可为空语句
public class test{public static void main(String argv[]){for (int i = 0; i < 10; i++) {System.out.println(i);}}
}

while循环
while(表达式)
{循环体;
}
while语句的执行规则如下:
- 计算表达式的值,为true则进行2,否则进行3
- 执行循环体,再进行1
- 结束while语句
do-while循环
do
{//循环体;
}
while (表达式);
do-while循环和while循环的区别是do-while循环至少执行一次,执行第一次后再计算表达式的值,为true则继续执行,否则结束循环。一般在循环体中要加入对表达式值的调整,否则容易进入死循环
break和continue
break在循环中起到跳出循环的作用,当程序执行到break语句时,无论循环条件是否满足,直接跳出循环
continue用于跳过本次循环中,位于continue后面的语句,进入下一次循环
1.continue不能直接跳出循环,而是跳过本次循环剩余的语句
2.continue在for和while中有不同的效果(1)在for循环中,continue跳过后,for(表达式1;表达式2;调整) 调整部分仍然会执行,不影响整体循环的退出(2)在while/do while循环中,continue会跳过剩余全部代码,若调整部分位于continue后,则不会执行,可能会影响循环的退出
for循环和数组
JDK5对for语句的功能给予了扩充、增强,以便更好的遍历数组。。语法如下:
for(声明循环变量:数组的名字){...
}
其中,声明的循环变量的类型必须和数组的类型相同。
这种类型的for循环可以理解为“每次循环依次取数组中每一个元素的值”
声明的变量中取出的是数组元素的值,而不是索引下标
看个例子
public class test{public static void main(String argv[]){int a[]={1, 2, 3, 4};char b[] = {'a', 'b', 'c', 'd'};for (int n = 0; n < a.length; n++) {//传统的for循环System.out.printf("%d ", a[n]);}System.out.println();for (int n = 0; n < b.length; n++) {//传统的for循环System.out.printf("%c ", b[n]);}System.out.println();for (int i : a) { //循环变量i依次取出a数组中的每个元素System.out.printf("%d ", i);}System.out.println();for (char ch : b) { //循环变量ch依次取出b数组中的每个元素System.out.printf("%c ",ch);}}
}

需要注意的是,for(声明循环变量:数组的名字)必须是变量声明,不可以使用已经声明过的变量。例如,第三个for循环不可以写成:
int i =0;
for(i:a){System.out.println(i);
}
相关文章:
【Java学习笔记】三、运算符,表达式、分支语句和循环语句
运算符与表达式 算数运算符与算数表达式 加减运算符 操作数:2结合方向:从左到右优先级:4级 乘(*)、除(/)和取余(%)运算符 操作数:2结合方向:从左到右优先…...
广度优先遍历(BFS):逐层探索的智慧
引言:什么是广度优先遍历? 广度优先遍历(BFS)是一种用于遍历或搜索树(Tree)和图(Graph)结构的算法。其核心思想是逐层访问节点,先访问离起点最近的节点,再逐…...
网络HTTP
HTTP Network Request Library A Retrofit-based HTTP network request encapsulation library that provides simple and easy-to-use API interfaces with complete network request functionality. 基于Retrofit的HTTP网络请求封装库,提供简单易用的API接口和完…...
(七)企业级高性能 WEB 服务 - HTTPS 加密
在当今互联网时代,数据安全成为了每个企业和开发者必须关注的重点。尤其是对于Web服务来说,如何保障用户数据的安全传输是至关重要的。本文将深入探讨HTTPS加密的原理、Nginx的HTTPS配置,以及如何通过Nginx实现高性能的Web服务。 1. HTTPS加密…...
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)
标题:[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2) 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释:重要思想:使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁的的日志…...
MySQL(单表)知识点
文章目录 1.数据库的概念2.下载并配置MySQL2.1初始化MySQL的数据2.2注册MYSQL服务2.3启动MYSQL服务2.4修改账户默认密码2.5登录MYSQL2.6卸载MYSQL 3.MYSQL数据模型3.1连接数据库 4.SQL简介4.1SQL的通用语法4.2SQL语句的分类4.3DDL语句4.3.1数据库4.3.2表(创建,查询,修改,删除)4…...
HarmonyOS Next 属性动画和转场动画
HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…...
使用Node.js从零搭建DeepSeek本地部署(Express框架、Ollama)
目录 1.安装Node.js和npm2.初始化项目3.安装Ollama4.下载DeepSeek模型5.创建Node.js服务器6.运行服务器7.Web UI对话-Chrome插件-Page Assist 1.安装Node.js和npm 首先确保我们机器上已经安装了Node.js和npm。如果未安装,可以通过以下链接下载并安装适合我们操作系…...
Docker 部署 MongoDB 并持久化数据
Docker 部署 MongoDB 并持久化数据 在现代开发中,MongoDB 作为 NoSQL 数据库广泛应用,而 Docker 则提供了高效的容器化方案。本教程将介绍如何使用 Docker 快速部署 MongoDB,并实现数据持久化,确保数据不会因容器重启或删除而丢失…...
DeepSeek + 沉浸式翻译 打造智能翻译助手
本文详细介绍如何使用 DeepSeek API 沉浸式翻译插件打造个性化翻译助手。 一、DeepSeek API 配置 基础配置 API 基础地址:https://api.deepseek.com需要申请 API Key支持与 OpenAI SDK 兼容的调用方式 可用模型 deepseek-chat:已升级为 DeepSeek-V3&am…...
cdn取消接口缓存
添加cdn后,使用cdn加速域名访问接口 是缓存,不是最新的数据,如果使用局域网则是最新的数据,如果修改配置,确保使用cdn域名请求的接口返回不是缓存 要确保通过CDN加速域名访问接口时返回的是最新的数据,而不…...
字节跳动C++客户端开发实习生内推-抖音基础技术
智能手机爱好者和使用者,追求良好的用户体验; 具有良好的编程习惯,代码结构清晰,命名规范; 熟练掌握数据结构与算法、计算机网络、操作系统、编译原理等课程; 熟练掌握C/C/OC/Swift一种或多种语言ÿ…...
OpenHarmony子系统开发编译构建指导
OpenHarmony子系统开发编译构建指导 概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独…...
MySQL进阶-关联查询优化
采用左外连接 下面开始 EXPLAIN 分析 EXPLAIN SELECT SQL_NO_CACHE * FROM type LEFT JOIN book ON type.card book.card; 结论:type 有All ,代表着全表扫描,效率较差 添加索引优化 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】࿰…...
数据结构第六节:二叉搜索树(BST)的基本操作与实现
【本节要点】 二叉搜索树(BST)基本原理代码实现核心操作实现辅助函数测试代码完整代码 一、二叉搜索树(BST)基本原理与设计总结 注:基本原理的详细分析可以在数据结构第六节中查看,这里是简单描述。 二叉搜…...
在昇腾GPU上部署DeepSeek大模型与OpenWebUI:从零到生产的完整指南
引言 随着国产AI芯片的快速发展,昇腾(Ascend)系列GPU凭借其高性能和兼容性,逐渐成为大模型部署的重要选择。本文将以昇腾300i为例,手把手教你如何部署DeepSeek大模型,并搭配OpenWebUI构建交互式界面。无论…...
在window终端创建docker容器的问题
问题: 错误原因: PowerShell 换行符错误 PowerShell 中换行应使用反引号而非反斜杠 \,错误的换行符导致命令解析中断。 在 Windows 的 PowerShell 中运行 Docker 命令时遇到「sudo 无法识别」的问题,这是因为 Windows 系统原生不…...
掌握Kubernetes Network Policy,构建安全的容器网络
在 Kubernetes 集群中,默认情况下,所有 Pod 之间都是可以相互通信的,这在某些场景下可能会带来安全隐患。为了实现更精细的网络访问控制,Kubernetes 提供了 Network Policy 机制。Network Policy 允许我们定义一组规则,…...
ReAct论文阅读笔记总结
ReAct:Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面,经过适当Prompt的大型语言模型(LLMs)已经展示了在算术、常识和符号推理任务中通…...
Linux云计算SRE-第十七周
1. 做三个节点的redis集群。 1、编辑redis节点node0(10.0.0.100)、node1(10.0.0.110)、node2(10.0.0.120)的安装脚本 [rootnode0 ~]# vim install_redis.sh#!/bin/bash # 指定脚本解释器为bashREDIS_VERSIONredis-7.2.7 # 定义Redis的版本号PASSWORD123456 # 设置Redis的访问…...
涿州靠谱软体沙发家具城,为你打造舒适家居的理想之选!
在涿州,选择一家靠谱的软体沙发家具城至关重要,它不仅关系到家居的舒适度,还影响着生活品质。今天就为大家推荐涿州市雅木轩家具店(简称:旭日家具),并将它与其他大厂进行对比,让你更…...
K210+STM32F103C8T6低成本送药小车:一个电赛小白的完整避坑与调参记录
K210STM32F103C8T6低成本送药小车:一个电赛小白的完整避坑与调参记录 第一次参加电子设计竞赛时,面对动辄上千元的OpenMV和各类传感器预算,我盯着手头仅有的K210开发板和STM32最小系统板陷入了沉思——能否用这两块总价不到300元的板子&#…...
别再硬熬了!okbiye AI 写作,把毕业论文终稿焊死在及格线以上
okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 凌晨两点的宿舍,文档停在 “研究背景” 第三段,导师的红色批注在聊天框堆成了山,知网查重的弹窗跳出来的…...
树莓派Pico W到手后,除了Wi-Fi,这几点硬件细节和Pico真不一样
树莓派Pico W硬件深度解析:超越Wi-Fi的工程细节 当我第一次拿到树莓派Pico W时,表面看起来它只是Pico的无线版本——同样的RP2040芯片、相似的引脚布局和几乎一致的尺寸。但当我开始实际项目开发时,才发现这些"看似相同"背后隐藏着…...
3D打印技术如何重塑消费电子供应链:从原型验证到小批量生产
1. 项目概述:当3D打印遇上消费电子最近几年,我身边不少做产品设计、硬件开发的朋友,聊天时总会不约而同地提到一个词:3D打印。以前大家觉得这玩意儿就是个做手办、打样机的“玩具”,但现在风向明显变了。尤其是在消费电…...
AI文本检测技术解析:从原理到实践,构建内容真实性鉴别工具
1. 项目概述:AI写作检测工具的核心价值最近在GitHub上看到一个挺有意思的项目,叫“AI-Writing-Detection”。光看名字,你大概就能猜到它是干什么的——检测一段文本是不是AI写的。这玩意儿现在可太有用了。自从大语言模型(LLM&…...
LLM应用开发框架llmflows:轻量级工作流编排实战指南
1. 项目概述:一个为LLM应用构建量身定制的轻量级框架最近在折腾大语言模型应用开发的朋友,估计都经历过类似的“甜蜜的烦恼”:想法很美好,但真要把想法变成可运行、可维护的代码,中间隔着无数个坑。从Prompt的反复调试…...
AWorksLP嵌入式系统移植FatFs驱动SD卡:从原理到实践全解析
1. 项目概述:为什么要在AWorksLP上折腾FatFs和SD卡?如果你正在用AWorksLP这类面向物联网的轻量级实时操作系统(RTOS)平台做开发,大概率会遇到一个经典需求:如何可靠、高效地存储数据。无论是记录传感器日志…...
杰理之似于“PO”声,如果切换的时机刚好在音量较高的时候,比较容易出现【篇】
似于“PO”声,如果切换的时机刚好在音量较高的时候,比较容易出现...
从白噪声到ARMA谱:平稳随机信号功率谱的实战解析
1. 平稳随机信号功率谱密度的工程意义 第一次接触功率谱密度这个概念时,我也被那一堆数学公式搞得头晕。直到有次在调试通信设备时,发现接收端总是有奇怪的干扰,导师让我做个频谱分析,这才真正明白功率谱密度到底有什么用。简单来…...
