Java程序设计基础笔记 • 【第3章 运算符与表达式】
全部章节 >>>>
本章目录
3.1 运算符(一)
(1)运算符,顾名思义就是用于计算的符号。
(2)Java 语言中的运算符
①按功能分为:赋值运算符、算术运算符、关系运算符和逻辑运算符
②按操作数的个数分类:单目运算符、双目运算符、三目运算符
(3)使用运算符时,要关注下列三个方面:
①运算符的目:运算符能连接操作数的个数称为运算符的目
②运算符的优先级:优先级是指在一个表达式中出现多个不同运算符,在进行计算时运算符执行的先后次序。
③运算符的结合方向:结合方向又称为结合性,是指当一个操作数连接两个同一优先级的运算符时,按运算符的结合性所规定的结合方向处理。
3.1.1 赋值运算符
赋值运算符为“=”,是Java语言中最简单,也是最常用的运算符。
赋值运算用于将赋值运算符右侧表达式的结果赋予赋值运算符左侧的变量。
int english = 92;
赋值运算符具有自右向左的结合性
int a,b,c; //同时声明三个变量
a = b = c = 1; //自右向左赋值
注意:赋值运算符的左侧只能为一个变量,而右侧可以是变量、常量或表达式。
3.1.2 算数运算符
运算符 |
功能 |
示例 |
+ |
加法运算 |
表达式1+2计算结果为3 |
- |
减法运算 |
表达式2-1计算结果为1 |
* |
乘法运算 |
表达式2*2计算结果为4 |
/ |
除法运算 |
表达式4/2计算结果为2 |
% |
模运算 |
表达式5%2计算结果为1 |
注意:
如果参与运算的数值都是整数,则“/”完成的是整除运算,如5/2 的值是2 而非2.5。
模运算“%”是进行除法运算后取余数,参与运算的必须是整数。
示例:使用算术运算符实现两个数字的基本四则运算。
int num1 = 5;
int num2 = 3;
int result;
result = num1+num2; // 加法运算
System.out.printf("%d + %d的结果是 %d\n",num1,num2,result);
result = num1-num2; // 减法运算
System.out.printf("%d - %d的结果是 %d\n",num1,num2,result);
result = num1*num2; // 乘法运算
System.out.printf("%d * %d 的结果是 %d\n",num1,num2,result);
result = num1/num2; // 除法运算
System.out.printf("%d / %d的结果是 %d\n",num1,num2,result);
result = num1%num2; // 求余运算
System.out.printf("%d %% %d的结果是 %d\n",num1,num2,result);
(1)在算术运算符中,还存在两个较为独特的单目运算符,分别是自增和自减
++变量名 或 变量名++
--变量名 或 变量名--
(2)自增和自减运算符分别用于使变量值自增1或自减1。
3.1.3 复合运算符
在Java语言中,可以将赋值运算符和算术运算符进行组合,从而形成复合赋值运算符,用于对变量自身执行算术运算。
运算符 |
功能 |
示例 |
+= |
加法运算 |
int a=10; a+=2 等效于a=a+2; a=12 |
-= |
减法运算 |
int a=10; a-=2 等效于a=a-2; a=8 |
*= |
乘法运算 |
int a=10; a*=2 等效于a=a*2; a=20 |
/= |
除法运算 |
int a=10; a/=2 等效于a=a/2; a=5 |
%= |
模运算 |
int a=10; a%=2 等效于a=a%2; a=0 |
当需要对变量自身进行算术运算时,建议使用复合赋值运算符,效率要远高于算术运算符。
复合赋值运算符的结合性自右向左。
例如:
int a=5;
a+=a+=5;// 等效于a=a+(a+5)
执行完毕后,变量a 的值为15。
3.1.4 实践练习(一)
3.1.5 实践练习(二)
3.2 运算符(二)
3.2.1 关系运算符
关系运算符用于比较两个变量或表达式的值的大小关系。
在Java 中,关系运算结果值为bool 类型,包括“true”或“false”。
运算符 |
功能 |
示例 |
> |
比较大于关系 |
表达式2>1 计算结果为“True” |
< |
比较小于关系 |
表达式2<1 计算结果为“False” |
>= |
比较大于等于关系 |
表达式2>=1 计算结果为“True” |
<= |
比较小于等于关系 |
表达式2<=1 计算结果为“False” |
== |
比较相等关系 |
表达式2==1 计算结果为“False” |
!= |
比较不相等关系 |
表达式2!=1 计算结果为“True” |
示例:使用关系运算符实现两个数字之间的大小比较。
int num1 = 88;
int num2 = 100;
boolean result;
result = num1>num2;
System.out.printf("%d > %d的结果为:%b\n",num1,num2,result);
result = num1>=num2;
System.out.printf("%d >= %d的结果为:%b\n",num1,num2,result);
result = num1<num2;
System.out.printf("%d < %d的结果为:%b\n",num1,num2,result);
result = num1==num2;
System.out.printf("%d == %d的结果为:%b\n",num1,num2,result);
result = num1!=num2;
System.out.printf("%d != %d的结果为:%b\n",num1,num2,result);
3.2.2 逻辑运算符
使用关系运算符可以比较程序中两个值的大小关系,但在程序中经常需要从多个比较关系中得到综合判断的结果。
运算符 |
功能 |
示例 |
&& |
与运算,即同时成立,缺一不可 |
a>b&&c>d:只有左右两个表达式的值都为true, 整个结果才为True。只要有一个表达式为false,则整个表达式为False |
|| |
或运算, 即两者中有一个成立即可 |
a>b||c>d:左右两个表达式中只要有一个成立就为true,只有两个都为false才为false |
! |
非运算,取反 |
!(a>b):如果表达式a>b 为false,则进行取反运算后为true;如果表达式a>b为true,则进行取反运算后为false |
示例:要想进入微软亚洲研究院工作,必须是研究生毕业,且从事软件开发两年以上的工作经验
如果要描述入职微较亚洲研究院的条件,则伪代码为:
(学历>=硕士)&&(工作年限>=两年)
如果入职微软亚洲研究院的条件变为“学历为硕士以上或工作年限两年以上”,则伪代码为:
(学历>=硕士)(工作年限>=两年)
如果入职微软亚洲研究院的条件变为“学历不能为硕士以下”,则伪代码为:
!(学历<硕士)
int degree, workyear;
degree = 3; //degree 1代表本科,2代表硕士,3代表博士
workyear = 3;
boolean result=(degree>=2)&&(workyear>=2);
System.out.println("博士并且工作3年的入职评判结果为:"+result);
degree = 2;
workyear = 1;
result = (degree >= 2) && (workyear >= 2);
System.out.println ("硕士并且工作1年的入职评判结果为:" + result);
degree = 1;
workyear = 1;
result = (degree >= 2) && (workyear >= 2);
System.out.println("本科并且工作1年的入职评判结果为:" + result);
3.2.3 三母运算符
三目运算符可以快速的帮我们实现条件的判断,语法如下:
布尔表达式?表达式1:表达式2
条件表达式的结果由布尔表达式决定,如果布尔表达式的值为true,则返回表达1的值,否则返回表达式2的值。
示列:使用三目运算符实现成年与否的判断
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄");
int age = sc.nextInt();
System.out.println(age>=18?"成年":"未成年");
注意:
- 条件运算符的优先级低于关系运算符和算术运算符,高于赋值运算符。
- JAVA中条件运算表达式中的关系表达式值的类型必须为布尔类型,只能是true或false。
- 条件运算符的结合性是右结合性。
3.2.4 实践练习
3.3 运算符优先级和表达式
3.3.1 表达式
表达式和运算符:
计算机程序在处理数据时会进行大量的计算,而数据的运算则需要借助运算符和表达式来完成。
表达式是指由操作数和运算符组成的用于完成某种运算功能的语句
其中Y、X、Z、10 称为操作数,=、*、+ 称为运算符。
3.3.2 运算符和优先级
在Java语言中进行表达式求值时,同一优先级的运算符,运算次序由结合性决定,不同优先级的运算符,运算次序由优先级决定。
优先级 |
运算符 |
结合性 |
1 |
() |
从左到右 |
2 |
!、++、-- |
从右到左 |
3 |
* 、/、 % |
从左到右 |
4 |
+ 、- |
从左到右 |
5 |
> 、<、 >=、 <= |
从左到右 |
6 |
==、 != |
从左到右 |
7 |
&& |
从左到右 |
8 |
|| |
从左到右 |
9 |
= 、+=、 -=、 *=、 /=、 %= |
从右到左 |
3.3.3 实践练习
3.4 数据类型转换
- 不同类型的数据在进行混合运算时需要进行类型转换,即将不同类型的数据转换为同种类型的数据后再进行计算。
- 针对于值类型的数据,类型转换主要包括以下两种形式:自动类型转换、强制类型转换
3.4.1 自动类型转换
条件1:满足自动类型转换的条件
两种类型要兼容:数值类型(整型和浮点型)互相兼容
目标类型大于源类型: 例如:double 型大于 int 型
条件2:操作数向大操作数类型转换,计算结果也为表达式中大操作数的类型
示例:实现自动类型转换
//自动转换示例3
int a3 = 10;
long b3 = 1000;
long result3 = a3 + b3;
System.out.println(result3);
//自动转换示例4
byte a4 = 10;
char b4 = 'a'; //字母a对应为97
//a4、b4将转换为int类型,最终运算的结果为int类型
int result4 = a4 + b4;
System.out.println(result4);
3.4.2 强制类型转换
强制类型转换可以将大数据类型转化为小数据类型(如将double转换为int),在转换过程中会丢失数据的精度。
语法:
(目标数据类型) 表达式;
示例:求半径为5的圆的周长,结果取整数
public class TypeTran {
public static void main(String[] args) {
int r = 5;
int round = (int)(2*3.14*r);//求圆的周长,强制类型转换后会丢失精度
System.out.println("半径为"+r+"的圆的周长为:"+round);
}
}
3.4.3 实践练习(一)
3.4.4 实践练习(二)
总结:
- 在Java中,运算符按功能分为:赋值运算符、算术运算符、关系运算符和逻辑运算符。
- 关系运算符运算后的结果为boolean类型。
- 逻辑运算符可以连接多个关系运算符,它的操作数与结果均为boolean类型。
- 数据类型转换分为自动类型转换和强制类型转换。
- 数据类型转换是为方便不同类型的数据之间进行计算,发生自动类型转换有一定的条件。
Java程序设计基础笔记 • 【第3章 运算符与表达式】的更多相关文章
- Java程序设计基础笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java程序设计基础作业目录(作业笔记) 第1章 Java程序设计基础笔记 • [第1章 初识Java] 第2章 Java程序 ...
- Java程序设计基础笔记 • 【第1章 初识Java】
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
- Java程序设计基础笔记 • 【第5章 循环结构】
全部章节 >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...
- Java程序设计基础笔记 • 【第10章 数组】
全部章节 >>>> 本章目录 10.1 数组概述 10.1.1 数组优势 10.1.2 Java中的数组 10.1.3 数组的分类 10.2 一维数组 10.2.1 数组的 ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
- Java程序设计基础笔记 • 【第6章 循环结构进阶】
全部章节 >>>> 本章目录 6.1 for循环 6.1.1 for循环的简介 6.1.2 for循环的使用 6.1.3 for循环的表达式 6.1.4 实践练习 6.2 ...
- 【Java】《Java程序设计基础教程》第一章学习
一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...
- 【Java】《Java程序设计基础教程》第二章学习
一.标识符 Java 中标识符的使用有如下规定:(1)标识符由字母.数字.美元符号”$”和下划线”_”组成,除此之外的任何其他符号是不能作为标识符使用的.(2)标识符中的第一个字符不能为数字. (3 ...
- Java程序设计基础笔记 • 【第2章 变量与数据类型】
全部章节 >>>> 本章目录 2.1 变量 2.1.1 变量的概念 2.1.2 变量的使用 2.1.3 实践练习 2.2 数据类型 2.2.1 数据类型的种类 2.2.2 ...
随机推荐
- AI ubantu 环境安装
ubantu安装记录 apt install python3-pip anaconda安装 https://repo.anaconda.com/archive/Anaconda3-2020.11-Li ...
- Dubbo服务限流
为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流. Dubbo中能够实现服务限流的方式较多,可以划分为两 ...
- 一个简单的Extjs继承实现
function extend(sub,sup){ //目地:实现只继承父类的原型对象 //1.用一个空函数据中转,目地进行中转 var F = new Function(); //2.实现空函数的的 ...
- Mysql中replace与replace into的用法讲解
Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...
- 1.Vuejs-第一个实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 云原生时代之Kubernetes容器编排初步探索及部署、使用实战-v1.22
概述 **本人博客网站 **IT小神 www.itxiaoshen.com Kubernetes官网地址 https://kubernetes.io Kubernetes GitHub源码地址 htt ...
- CPU中的上下文
目录 一.简介 二.进程切换 三.线程切换 四.中断切换 五.中断检测和查看 六.模拟 一.简介 Linux是多任务操作系统,cpu划分固定时间片,分给每个进程,当前进程时间片执行完毕,将挂起,运行下 ...
- CF946B Weird Subtraction Process 题解
Content 有两个数 \(a,b\),执行如下操作: 如果 \(a,b\) 中有一个数是 \(0\),结束操作,否则跳到操作 \(2\). 如果 \(a\geqslant 2b\),那么 \(a\ ...
- java 多线程 集合的包装方法Collections.synchronizedXXXXX;线程安全的集合类:Java.util.concurrent.ConcurrentXXX;java.util.concurrent.CopyOnWriteXXXX
问题:ArrayList 等线程不安全 当多线程并发修改一个集合数据时,可能同一个下标位置被覆盖. 示例代码: 一个List,我们创建10个线程,每个线程往这个List中添加1000条数据,结果往往 ...
- C++ 11 新特性: auto 和 decltype 区别和联系
一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...