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 ...
随机推荐
- spring注解-web
以往进行web项目开发都需要在web.xml配置servlet.filter.listener,在Servlet3.0可以通过注解的方式配置它们(注意:必须用tomcat7以上版本) @WebServ ...
- 【Linux】【Services】【NetFileSystem】Samba
1. 简介 1.1. 背景:case is initiative by 某windows无良人事,需求是需要一整块4T的硬盘,由于ESXi5最大支持一块盘是2T大小,而且不可以使用windows动态卷 ...
- 【力扣】剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 示例: s = "abaccdeff"返回 "b" s = &qu ...
- 转:苹果iphone APP界面设计尺寸官方版
苹果iphone APP界面设计尺寸官方版
- [BUUCTF]PWN——babyheap_0ctf_2017
[BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...
- 解决iwrite无法粘贴问题
使用iwrite写作的时候,会遇到系统禁止粘贴的障碍 按F12键,再按F1键,在Disable JavaScrip前面的方框里打上勾就可以愉快的粘贴了
- WebRTC本地插入多个转发节点
网络延迟是一种比较常见的情况.在本地网页上,我们可以建立多个RTCPeerConnection,增加转发次数,来模拟出网络延迟的效果. 建立通话后,再往后面增加本地转发节点. 准备 页面准备,方便我们 ...
- redis pipeset发布订阅
#!/usr/bin/env python # Author:Zhangmingda import redis,time pool = redis.ConnectionPool(host='192.1 ...
- TCP 两次握手为什么无法阻止历史连接?
摘要:在两次握手的情况下,「被动发起方」没有中间状态给「主动发起方」来阻止历史连接,导致「被动发起方」可能建立一个历史连接,造成资源浪费. 本文分享自华为云社区<TCP 两次握手为什么无法阻止历 ...
- JAVA微信公众号网页开发——通过接收人的openid发送模板消息
TemplateData.java 1 package com.weixin.weixin.template; 2 3 public class TemplateData { 4 private St ...