JAVA学习day03 javase基础语法 ——运算符
3.1 算数运算符
运算符是用来计算数据的符号。数据可以是常量,也可以是变量。被运算符操作的数我们称之为操作数。
算数运算符最常见的操作就是将操作数参与数学运算,具体使用见下表:
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
+ | 加 | 2+3 | 5 |
+ | 连接字符串 | “中”+“国” | 中国 |
- | 负号 | int a = 3;-a | -3 |
- | 减 | 3-1 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 4/2 | 2 |
% | 取模 | 5%2 | 1 |
++ | 自增 | int a = 1;a++/++a | 2 |
- - | 自减 | int b = 2;b- - | 1 |
我们在使用算数运算符时,记得要注意以下事项:
● 加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
● 除法“ / ”当两边为整数时,取整数部分,舍余数部分。当其中一遍为浮点型时,按照正常规则相除。
● “ % ”为整除取余符号,小数取余没有意义。结果符号与被取余符号相同。
● 整数做被除数,0 不能做除数,否则报错。
代码演示:
/*
算数运算符
*/
package org.westos.cn;
public class OperatorDemo {
public static void main(String[] args) {
/*
* 常量使用算数运算符
*/
System.out.println(10+20);
/*
* 变量使用算数运算符
*/
int a = 10;
int b = 20;
System.out.println(a+b);
//"+"作为加法运算使用
int c = a + b;
//"+"作为连接字符串使用
System.out.println("a = "+a);
}
}
运行结果下图所示:
图1-1 运行结果
3.2 算数运算符++、- - 的使用
在一般情况下,算数运算符不会改变参与计算的变量值。而是在原有变量值不变的情况下,计算出新的值。但是有的操作符会改变变量的值,例如 ++ 、- - 。
● ++运算符,会在原有值的基础上自增1;
● - - 运算符,会在原有值的基础上自减1。
看下列代码:
/*
* 自增自减
*/
int i = 3;
int j = 3;
i++;
j--;
System.out.println(i);
System.out.println(j);
上面代码输出的结果i的值为4,j的值为2,说明在原有值的基础上发生了改变。
再看一段代码:
int n = 3;
int m = 3;
++n;
--m;
System.out.println(n);
System.out.println(m);
这段代码的输出结果 n的值为4,m为2;
这说明++、- - 运算符单独使用,不参与运算操作时,运算符前后位置导致的运算结果是一样的。
接下来说明++、- - 运算符参与操作时,发生了怎样的变化,看下面的代码:
int a = 3;
int b;
b = a++ + 10;
System.out.println(a);
System.out.println(b);
上面代码的输出结果a的值为4,b为13;
这里要强调下,当++、- - 运算符参与运算操作时,后置++、- - 的作用:
● ++、- - 运算符后置时,先使用a的原有值参与运算操作,运算操作完成后,变量a的值自增或自减1;
再说明下++、- - 运算符前置是,参与运算操作的变化,看下面一段代码:
int a = 3;
int b;
b = ++a + 10;
System.out.println(a);
System.out.println(b);
上面的代码的输出结果a的值为4,b的值为14;
所以当++、- - 运算符参与运算操作时,前置++、- - 的作用:
●++、- - 运算符前置时,先将变量的值自增或自减1,然后使用更新的新值再参与后面的运算。
3.3 赋值运算符
赋值运算符就是为变量赋值的符号,赋值运算符使用方法如下表:
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | int a = 2 | 2 |
+= | 加后赋值 | int a = 2;a+=2 | 4 |
-= | 减后赋值 | int a = 2; a-=2 | 0 |
*= | 乘后赋值 | int a = 2;a*=3 | 6 |
/= | 除后赋值 | int a = 2;a/=2 | 1 |
%= | 取模后赋值 | int a = 2;a%=2 | 0 |
注意:像+=这样的形式的赋值运算符,会将结果自动强转成等号左边的数据类型。
写一个代码,我们来看下赋值运算符的使用
public class OperatorDemo2 {
public static void main(String[] args) {
/*
* 赋值运算符
* +=, -=, *=, /=, %= :
* 上面的运算符作用:将等号左右两边计算,会将结果自动强转成等号左边的数据类型,再赋值给等号左边的
* 注意:赋值运算符左边必须是变量
*/
byte b = 10;
b += 20;
System.out.println(b);
}
}
运行结果如下图所示:
图 1-2 运行结果
3.4 比较运算符
比较运算符,又叫关系运算符,它是用来判断两个操作数的大小关系或是否相等关系,结果是布尔值 true 或 false。
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
> | 大于 | 3>4 | false |
< | 小于 | 3<4 | true |
>= | 大于等于 | 4>=3 | true |
<= | 小于等于 | 4<=3 | false |
这里需要注意的:
● 赋值运算符 = 和比较运算符 ==的区别:
(1)赋值运算符 = 是将 = 号右边的值赋值给左边的变量;
(2)比较运算符 = = 是用来判断 = =左右变量或常量是否相等的;
通过下面的代码演示这个注意事项:
int a = 3;
int b = 4;
System.out.println(a = b);
System.out.println(a == b);
上面代码的输出结果第一个值为4,第二个值为布尔值false。
运行结果如下:
图 1-3 运行结果
3.5 逻辑运算符
逻辑运算符是用布尔值进行运算的,运算结果为true或false。
运算符 | 运算结果 | 范例 | 结果 |
---|---|---|---|
& | 与 | false&true | false |
l | 或 | false l true | true |
^ | 异或 | true^false | true |
! | 非 | !true | false |
&& | 短路与 | false&&true | false |
ll | 短路或 | true ll false | true |
我们来看下逻辑运算符的常用方式:
● 逻辑运算符通常连接两个其他表达式来表示计算的结果布尔值;
● 当使用逻辑与或者短路或时,只要运算符前的表达式能判断出结果,运算符后面的表达式就不再判断。
下面用过代码演示一下:
package org.westos.demo1;
public class OperatorDemo3 {
public static void main(String[] args) {
boolean b = 100 > 99;
boolean b1 = false;
System.out.println(b && b1);//结果为false
System.out.println(b || b1);//结果为true
System.out.println(!b1);//结果位true
}
}
运算规律:
(1)短路与 && :参与运算的两边的数据,有false,运算结果为false;
(2)短路或 || :参与运算的两边的数据,有true,运算结果为true;
(3)逻辑非:! :参与运算的数据,原先是true变为false,原先是false变为true。
3.6 三元运算符
● 格式:
(条件表达式)?表达式1 :表达式2;
● 运算规则:
先判断条件表达式的值,若为true,运算结果为表达式1,若为false,结果为表达式2。
下面通过代码演示三元运算符的使用:
package org.westos.demo1;
public class OperatorDemo4 {
public static void main(String[] args) {
System.out.println(3 > 4 ? "正确" : "错误");
int a = 3;
int b = 4;
String result = ((a == b) ? "相等" : "不相等");
System.out.println(result);
}
}
运行结果如下:
图 1-4 运行结果
3.7 运算符的优先级
下表是每种运算符的优先级,按照运算先后顺序排序(优先级相同的情况下,按照从左到右的顺序依次运算)
优先级 | 描述 | 运算符 |
---|---|---|
1 | 括号 | () 、[] |
2 | 正负号 | + - |
3 | 自增自减,非 | ++ 、- - 、! |
4 | 乘除,取余 | * 、/ 、% |
5 | 加减 | + 、- |
6 | 移位运算 | << 、>> 、>>> |
7 | 大小关系 | >、< 、>= 、<= |
8 | 相等关系 | == 、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | l |
12 | 逻辑与 | && |
13 | 逻辑或 | ll |
14 | 条件运算 | ? : |
15 | 赋值运算 | += 、-= 、*= 、/= 、%= |
16 | 位赋值运算 | &= 、l= 、<<= 、>>= 、>>>= |
下面看一段代码
package org.westos.demo1;
public class OperatorDemo5 {
public static void main(String[] args) {
int a = 5;
int b = 3;
int c = 1;
int d = (a > b && b > c ? (c++) : (++c));
System.out.println(d);
}
}
运行结果如下:
图 1-5 运行结果
上述代码的运算执行顺序是什么?
(1)小括号优先级高,先执行它中的内容;
(2)比较运算符>优先级高于逻辑与,先完成&&两边的运算再将它们的结果逻辑与;
(3)三元运算符的条件判断结果为true,则返回表达式1 的结果 c++。
运算符的学习就到这。