跟着姜少学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。

阅读全文
0 0
原创粉丝点击