全部章节 >>>>
本章目录
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类型。
- 数据类型转换分为自动类型转换和强制类型转换。
- 数据类型转换是为方便不同类型的数据之间进行计算,发生自动类型转换有一定的条件。