【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的访问…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
