跟着姜少学Java基础编程之四:运算符
来源:互联网 发布:外链网站源码 编辑:程序博客网 时间:2024/05/16 14:38
本篇主要介绍Java语言中运算符的相关知识。
运算符的概念
运算符就是为了指明对数值或者变量、表达式进行运算的方式。
运算符有多种分类,按照操作数据的个数分,有一目运算符、二目运算符、三目运算符。
根据功能来分,主要有赋值运算符、算术运算符、关系运算符、逻辑运算符和字符串运算符和条件(即三目)运算符。
4.1 赋值运算符
赋值运算符,即”=”,使用的语法如下:
变量名 = 值;
赋值运算符左侧只能是变量,右侧可以是常量或者表达式。
int num1 = 10;//给变量num1赋值为10int num2 = 20;//给变量num2赋值为20int num3 = num1+num2;//将表达式num1+num2的值赋给num330 = num2;//编译错误,赋值运算符左侧不可以是常量
4.2 算术运算符
算术运算符就是支持数学中常见的算术运算的功能,主要有加(+)、减(-)、乘(*)、除(/)、取模(%),还有自增(++)和自减(–)。
4.2.1 加减乘除
加减乘除属于双目运算符,也就是可以操作两个数,用法如下(以int型数据为例):
int num4 = 10+10;//可以操作两个常量 int num5 = 10+num4;//可以操作变量与常量 int num6 = num4+num5;//可以操作两个变量 int num7 = num6-10;//减法 int num8 = num7*5;//乘法 int num9 = num4/3;//除法 System.out.println(num9/0);//除数为0,运算时会抛出异常
4.2.2 取模
取模也叫取余,属于双目运算符,可以操作整数,char型和浮点数,用法如下:
int num10 = 10; int num11 = num10%7;//变量num10对7求模,num11的值为3 double num12 = 10.5; System.out.println(num12%3);//对浮点数求模,输出1.5
4.2.3 自增、自减
自增(++)与自减(–),属于单目运算符,可以操作整数,char型和浮点数,只能用于操作变量,不可以操作常量或者表达式,使当前变量的值加1,用法如下:
前置自增运算符,++写在变量的前面,先将变量的值加1后,再使用变量。
后置自增运算符,++写在变量的后面,先使用变量,使用之后再将变量的值加1。
//后置自增int age1 = 18;System.out.println(age1++);//输出18,先输出age1的值,然后age1再加1System.out.println(age1);//此处输出19//前置自增int age2 = ++age1;//先将age1的值加1之后,再赋值给age2System.out.println(age2);//输出20System.out.println(++age2);//输出21
当自增运算符与变量在单独一行,而无其他的方法或者表达式时,此时,前置和后置是等效的,都是变量增加1的作用。
int height = 175; height++;//后置自增在单独一行 System.out.println(height);//输出176 height = 175;//变量height重新赋值为175 ++height;//前置自增在单独一行 System.out.println(height);//输出176
也就是说当自增在单独一行时(自增不参与其他方法和表达式),此时前置和后置效果是一样的,也就是说,前置和后置所说的先自增再使用,和先使用再自增,仅仅是自增所在的代码行。
自减(–)的使用方法与自增相同,只不过效果是变量的值减一,这里就不再赘述。
4.2.4 赋值与算术运算符简写
赋值运算符可以与算术运算符结合成简写,主要有+=、-=、*=、/=以及%=。简写的赋值与运算符之间不允许使用空格,使用方法如下:
int sum = 0; sum += 10;//等价于sum = sum+10; sum -= 5;//等价于sum = sum-5; sum *= 2;//等价于sum = sum*2; sum /= 2;//等价于sum = sum/2; sum %= 3;//等价于sum = sum%3; sum % = 3;//编译错误,%与=之间不允许有空格
4.3 关系运算符
关系运算符属于二目运算符,是用于比较两个数值(或表达式)的大小,运算的结果是一个布尔值(true或者false)。
常见的关系运算符有大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)和不等于(!=)。
int score = 75; System.out.println(score>60);//输出true System.out.println(score>80);//输出false System.out.println(score>=75);//输出true System.out.println(score<60);//输出false System.out.println(score<=75);//输出true System.out.println(score==75);//输出true System.out.println(score!=60);//输出true
等于和不等于也可以判断引用类型或者布尔类型的判断。
4.4 逻辑运算符
逻辑运算符用于两个布尔类型的变量或者表达式的运算,主要有与(&&)、或(||)、非(!)。
4.4.1 逻辑与(&&)
逻辑与的运算规则为,两个操作数都为true才返回true,否则返回false。
int age = 20; int height = 175; System.out.println(age>18 && height>170);//输出true System.out.println(age>22 && height>170);//输出false System.out.println(age>18 && height>180);//输出false System.out.println(age>22 && height>180);//输出false
短路逻辑与
&&又称为短路与,在判断&&的值时,如果第一个操作数(或表达式)的值为false,则整个逻辑与表达式的值就已经确定为fasle了,和第二个操作数(或表达式)的值无关,这种情况下,java中就不再执行第二个操作数(或表达式),这种情况称为短路。
int age = 20;int height = 175;System.out.println(age>25 && ++height>170);//输出falseSystem.out.println(height);//输出175
上述代码,逻辑与的表达式中age>25的值为false,则整个逻辑与表达式的值为fasle,因此输出false,而且,产生了短路,不执行++height>170这个表达式,因此输出height的值仍然是175。
4.4.2 逻辑或
逻辑或的运算规则为,只要两个操作数(或者表达式)中有一个为true,则返回true;只有两个都为fasle是,才返回false
int age = 20;int height = 175;System.out.println(age>25 || height>170);//输出trueSystem.out.println(age>25 || height>180);//输出fasle
短路逻辑或
||也被称为短路逻辑或,和短路与(&&)一样,也具有短路功能,当第一个操作数(或表达式)值为true时,整个逻辑或的值已经确定为true,此时产生短路,不再执行第二个操作数(或表达式)。
int age = 20;int height = 175;System.out.println(age>18 || ++height>170);//输出trueSystem.out.println(height);//输出175
上述代码,逻辑与的表达式中age>18的值为true,则整个逻辑与表达式的值为true,因此输出true,而且,产生了短路,不执行++height>170这个表达式,因此输出height的值仍然是175。
4.4.3 非(!)
非(!)对布尔的变量或者表达式取反,属于单目运算符,如果变量或者表达式值为true,取反后为false;如果为false,取反后为true。
boolean flg = true;System.out.println(!flg);//输出为false
4.4.4 不短路与、不短路或
java中还支持不短路与(&)、不短路或(&)。
不短路与(&)和短路与(&&)的功能相同,除了没有短路效果。
不短路或(|)和短路或(||)的功能相同,除了没有短路效果。
注意事项
1)如果没有特殊要求,尽量使用短路与(&&)、短路或(||)
2)在短路与(&&)中,尽量把为false可能性大的,或者不耗时的判断操作放在第一个操作数处,以便提升效率;同样,在短路或(||)中,尽量把为true可能性大,或者不耗时的判断放在第一个操作数处。
4.5 字符串连接符
java当中的字符串常量为双引号(“”)包括的内容,比如”abcd”。字符串类型的变量,使用String进行声明,后续会详细讲解。如果需要将多个字符串进行拼接,可以使用+进行拼接。
String str = "hello";boolean flag = true;System.out.println(str+"world");//输出helloworldSystem.out.println(str+5);//字符串和整数拼接,输出hello5System.out.println(5+2+str);//输出7helloSystem.out.println(flag+str);//输出truehello
注意:
1)字符串与字符串拼接,直接将字符串首尾相接,拼接成一个新的字符串。
2)字符串与非字符串常量(或非字符串变量)拼接,直接将非字符串变量的值当做字符串的内容来拼接,比如上述代码中的flag+str。
3)当有多个非字符串类型参与拼接时,只有当字符串参与拼接时,结果才变为字符串类型,否则都按照之前的加法(+)运算来处理,比如上述代码中的5+2+str并不是输出52hello,而是先将5+2求和为7,7再与hello拼接,输出7hello。
4.6 条件运算符
条件运算符是java中的唯一一个三目运算符,其语法为:
布尔表达式?表达式1:表达式2
执行逻辑如下:
1)首先判断布尔表达式的值
2)如果布尔表达式的值为true,则整个条件表达式的值取表达式1的值
3)如果布尔表达式的值为fasle,则整个条件表达式的值取表达式2的值。
应用实例:
1)使用条件运算符求两个变量中的较大值。
//取两个变量中的较大值int num1 = 10;int num2 = 15;int max = num1>num2?num1:num2;System.out.println(max);//输出15
2)判断一个整型变量是正数、负数,还是零。
int num = 2;String res = num>0?"正数":(num<0?"负数":"零");System.out.println(num+"是"+res);//输出2是正数
实例2说明,条件运算符是可以嵌套的。
4.7 运算符的优先级
java中的大部分运算都是从左到右进行运算的,只有单目运算符,赋值运算符和条件运算符是从右向左结合的。
大体运算符的优先级由高到低如下:
1、分隔符,如() . ; []等
2、单目运算符,如++ – !等
3、乘、除、取模 * / %
4、加减 + -
5、关系运算 > < >= <= == !=
6、逻辑与 &&
7、逻辑或 ||
8、条件运算符 ?:
9、赋值运算符 = += -= *= /= %=等
注意:
如果在实际应用中,某个优先级不是特别清楚,想先运算,可以使用小括号()来提高优先级。
下一篇将介绍Java中的几个常用的工具类Scanner、Random和String。
- 跟着姜少学Java基础编程之四:运算符
- 跟着姜少学Java基础编程之二:类型转换
- 跟着姜少学Java基础编程之三:变量
- 跟着姜少学Java基础编程之五:Scanner、Random、String
- 跟着姜少学Java基础编程之八:循环结构
- 跟着姜少学Java基础编程之九:数组
- 跟着姜少学Java基础编程之十:方法
- 跟着姜少学Java基础编程之一:数据类型
- 跟着姜少学Java基础编程之六:选择结构之if分支
- 跟着姜少学Java基础编程之七:选择结构之switch
- 跟着二厶学编程---JAVA第五章---【运算符】
- 跟着姜少学Java基础编程之十一:面向对象-类与对象
- 跟着姜少学Java基础编程之十二:面向对象-构造方法
- 跟着姜少学Java基础编程之十三:面向对象-成员方法
- java基础四:运算符
- Java编程基础-运算符
- 跟着老毕学Java之网络编程
- Java入门之编程基础(四)
- (转)1992年,亲历卢布大崩溃的俄罗斯
- Nginx基本配置与参数
- javascript原型继承(第二篇)---继承的设计思想
- 51Nod1086背包问题V2(二进制优化)
- Nginx配置虚拟主机
- 跟着姜少学Java基础编程之四:运算符
- POJ 3352 浅谈边双连通分量缩点
- UI系统 UGUI-RectTransform
- python记录日志
- codeforces 810 D . Glad to see you!
- bzoj3876 支线剧情【上下界最小费用可行流】
- spring boot 使用总结
- 【LeetCode】C# 22、Generate Parentheses
- 计算机视觉opencv的牛人博客和代码汇总-多学习学习