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

【Java学习笔记】三、运算符,表达式、分支语句和循环语句

运算符与表达式

算数运算符与算数表达式

  1. 加减运算符
  • 操作数:2
  • 结合方向:从左到右
  • 优先级:4级
  1. 乘(*)、除(/)和取余(%)运算符
  • 操作数:2
  • 结合方向:从左到右
  • 优先级:3级

用算术运算符连接起来的符合Java语法规则的式子称为算数表达式

自增自减运算符

  • 操作数:2
  • 和C语言中的自增自减运算符一样,自增自减运算符可以放在操作元素的前面或者后面,作用也和C语言中的一样,前置则先执行++或–,后使用操作元素的值,后置则先使用操作元素的值,后执行++或–

算术混合运算的精度

精度从低到高的排序是:byte short char int long float double

在Java中计算算术表达式的值时,使用以下的精度运算规则:

  1. 如果表达式中有双精度浮点数,按双精度进行计算
  2. 如果表达式的最高精度是单精度浮点数,则按单精度进行运算
  3. 如果表达式中的最高精度是long型,则按long精度进行运算
  4. 如果表达式中的最高精度低于int型,则按int型精度进行运算

Java允许把不超出byte、short、char的取值范围的常量算术表达式的值赋给byte、short和char型变量
byte x = (byte)30+'a';是正确的,byte x = (byte)30+'b;是错误的

当赋值号右边的表达式中有变量时,编译只检查变量的类型,不检查变量中的值。例如,byte x = 97 + 1byte 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[] () . , ;
2instanceof 、 ++ 、- - 、 !从右到左
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语句的执行规则如下:

  1. 计算表达式的值,为true则进行2,否则进行3
  2. 执行循环体,再进行1
  3. 结束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);
}
http://www.dtcms.com/a/58211.html

相关文章:

  • 为什么js小数相加,会产生精度缺失的问题,怎么解决?
  • 模拟调制技术详解
  • 前后端数据加密传输【最佳方案】
  • 如何结合NLP(自然语言处理)技术提升OCR系统的语义理解和上下文感知能力?
  • Docker Engine 配置指南
  • 【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台
  • 《白帽子讲 Web 安全》之身份认证
  • 一篇文章讲解清楚ARM9芯片启动流程
  • 网络版汉译英服务(muduo)
  • HJ C++11 Day2
  • ControlNet
  • 多模式数据库如何向现代数据管理变革
  • 神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练
  • 安装anaconda在cmd中找不到安装版本
  • 蓝桥杯备赛攻略(怒刷5个月拿省一)
  • 2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析
  • LeetCodeHot100
  • C/S架构与B/S架构
  • 聚簇索引 VS 非聚簇索引
  • 爬虫案例八js逆向爬取网易音乐
  • 考研数一非数竞赛复习之Stolz定理求解数列极限
  • 关于AI数据分析可行性的初步评估
  • SQLAlchemy系列教程:如何防止SQL注入
  • Mysql表的复合查询
  • MongoDB(一) - MongoDB安装教程(Windows + Linux)
  • Qt中实现多个QMainWindow同时显示
  • Spring MVC笔记
  • 记录小白使用 Cursor 开发第一个微信小程序(二):创建项目、编译、预览、发布(250308)
  • 计算机毕业设计SpringBoot+Vue.js餐饮管理系统(源码+文档+PPT+讲解)
  • AutoGen学习笔记系列(八)Advanced - Custom Agents