一、介绍
在java中我们要进行大量的运算,java中也为我们提供了大量的运算符,我们常用的运算符有那些呢,下面我们来一一的介绍一下。
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。运算符大致可以分为5种类型:算术运算符、条件运算符、关系运算符、赋值运算符和逻辑运算符。
二、内容
1、运算符概念
运算符是用来计算数据的指令。数据可以是常量,也可以是变量。被运算符操作的数成为操作数。
int x = 3;
int y = 4;
int z = x + y;
2、算数运算符
将操作数参与数学计算(通常为数学计算)
运算符 运算规则 范例 结果
+ 正号 +3 3
+ 加 2+3 5
+ 连接字符串 “中”+“国” “中国”
- 负号 int a=3;-a -3
- 减 3-1 2
* 乘 2*3 6
/ 除 5/2 2
% 取模(余数) 5%2 1
++ 自增 int a=1;a++/++a 2
-- 自减 int b=3;a--/--a 2
注意:
加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
除法“/”当两边为整数时,取整数部分,舍余数。当两边为浮点型时,按正常规则相除。
“%”为整除取余符号,小数取余没有意义。取余结果的符号与被取余数的符号相同。
得到的是两个相除数据的余数。
用处: 判断两个数据是否整除。
整数做被除数,0不能做除数,否则报错。
小数做被除数,整除0结果为Infinity,对0取模结果为NaN
自增与自减
单独使用:
前置与后置效果相同,均为直接+1或-1
混合使用:
自增(++):将变量的值加1,分前缀式(如++i)和后缀式(如i++)。前缀式是先加1再使用;后缀式是先使用再加1。
自减(--):将变量的值减1,分前缀式(如--i)和后缀式(如i--)。前缀式是先减1再使用;后缀式是先使用再减1。
自增与自减运算符还遵循以下规律:
1. 可以用于整数类型byte、short、int、long,浮点类型float、double,以及字符串类型char。
2. 在Java5.0及以上版本中,它们可以用于基本类型对应的包装器类Byte、Short、Integer、Long、Float、Double、Character。
3. 它们的运算结果的类型与被运算的变量的类型相同。
/*
算数运算符:
+,-,*:相当于数学+,-*
+:做为字符串连接符
/:两个整数相除,结果是整数
%:两个整数取模(余数),结果是整数
++:自增(自身加1)
--:自减(自身减1)
注意事项:
1.加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
2.除法“/”当两边为整数时,取整数部分,舍余数。当两边为浮点型时,按正常规则相除。
3.“%”为整除取余符号,小数取余没有意义。取余结果的符号与被取余数的符号相同。
4.整数做被除数,0不能做除数,否则报错。
5.小数做被除数,整除0结果为Infinity,对0取模结果为NaN
自增与自减
单独使用:
前置与后置效果相同,均为直接+1或-1
与其他运算符混合使用:
++或- -为前置时,先+1或-1,再使用值。
++或- -为后置时,先使用值再+1或-1。
*/
public class Demo05Operator{
public static void main(String[] args){
//两个常量相加
System.out.println(3 + 5);//8
//变量加减乘除模
int a = 20;
int b = 7;
System.out.println(a + b);//27
System.out.println(a - b);//13
System.out.println(a * b);//140
System.out.println(a / b);//2
System.out.println(a % b);//6
//+:做为字符串连接符
System.out.println("中"+"国");//中国
/*
单独使用:
前置与后置效果相同,均为直接+1或-1
*/
//++:自增(自身加1)
//--:自减(自身减1)
int c = 10;
int d = 20;
//c++;
//d--;
++c;
--d;
System.out.println("c = " + c);//c = 11
System.out.println("d = " + d);//d = 19
System.out.println("===================================");
//1.加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
int e = 15;
int f = 20;
System.out.println("e + f = " + e + f);//e + f = 1520
System.out.println("e + f = " + (e + f));//e + f = 35
System.out.println(e + f + " = e + f");//35 = e + f
//2.除法“/”当两边为整数时,取整数部分,舍余数。当两边有浮点型时,按正常规则相除。
System.out.println(5.0 / 2);//2.5
//3.“%”为整除取余符号,小数取余没有意义。取余结果的符号与被取余数(符号左边的数)的符号相同。
System.out.println(5.1 % 2);//1.0999999999999996
System.out.println(5 % 2);//1
System.out.println(-5 % 2);//-1
System.out.println(5 % -2);//1
System.out.println(-5 % -2);//-1
//4.整数做被除数,0不能做除数,否则报错。
//System.out.println(5 / 0);//ArithmeticException: / by zero
//5.小数做被除数,整除0结果为Infinity(无穷),对0取模结果为NaN(not number 无效数字)
System.out.println(5.0 / 0);//Infinity
System.out.println(5.0 % 0);//NaN
System.out.println("===================================");
/*
与其他运算混合使用:
++或- -为前置时,先+1或-1,再使用值。
++或- -为后置时,先使用值再+1或-1。
*/
System.out.println(e);//15
System.out.println(f);//20
System.out.println(e++);//15
System.out.println(f--);//20
System.out.println(e);//16
System.out.println(f);//19
int i1 = 100;
int i2 = i1++ + 200;
System.out.println(i1);//101
System.out.println(i2);//300
int i3 = 100;
int i4 = ++i3 + 200;
System.out.println(i3);//101
System.out.println(i4);//301
}
}
3、赋值运算符
为变量赋值的运算符
运算符 运算规则 范例 结果
= 赋值 int a=2 2
+= 加后赋值 int a=2,a+=2 4
-= 减后赋值 int a=2,a-=2 0
*= 乘后赋值 int a=2,a*=2 4
/= 整除后赋值 int a=2,a/=2 1
%= 取模后赋值 int a=2,a%=2 0
注意:
诸如+=这样形式的赋值运算符,会将结果自动强转成等号左边的数据类型。
/*
赋值运算符:
=,+=,-=,*=,/=,%=
+=,-=,*=,/=,%=运算符的运算规则:
先将运算符两边进行+,-,*,/,%运算,在把结果赋值给左边的变量
+=,-=,*=,/=,%=注意事项:运算符左边必须是一个变量
+=,-=,*=,/=,%=特点:隐含一个强制类型转换
*/
public class Demo06Operator{
public static void main(String[] args){
int a = 10;
a += 20;//相当于 a = a + 20;
System.out.println("a = " + a);
//5 += 6;//错误: 意外的类型,这里5的位置需要一个变量
byte b = 10;
//b = b + 100;// 错误: 可能损失精度
//b = (byte)(b + 100);
b += 100;//+=隐含了一个强制类型转换 相当于b = (byte)(b + 100);
System.out.println("b = " + b);
}
}
4、比较运算符
又叫关系运算符,即判断两个操作数的大小关系及是否相等关系,比较运算符的返回一定为布尔值。
运算符 运算规则 范例 结果
== 相等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
==,!=,>,<,>=,<=
关系运算符的结果都是boolean型,也就是要么是true,要么是false。
注意事项
n 关系运算符“==”不能误写成“=” 。
public class Demo06Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
System.out.println(a == b);
System.out.println(a == c);
System.out.println("-----------------");
System.out.println(a != b);
System.out.println(a != c);
System.out.println("-----------------");
System.out.println(a > b);
System.out.println(a > c);
System.out.println("-----------------");
System.out.println(a >= b);
System.out.println(a >= c);
System.out.println("-----------------");
int x = 3;
int y = 4;
// System.out.println(x == y);
// System.out.println(x = y);// 把y赋值给x,把x的值输出
boolean bb = (x == y);
// 报错
// boolean cc = (x = y);
int cc = (x = y);
}
}
5、逻辑运算符
用于计算两个布尔值经过指定逻辑后的运算结果,结果同样是一个布尔值
运算符 运算规则 范例 结果
& 与(并且) false&true False
| 或 false|true True
^ 异或 true^flase True
! 非(取反) !true Flase
&& 短路与 false&&true False
|| 短路或 true ||true True
作用:逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 && x<6 。
基本使用: &(与),|(或),^(异或),!(非)
与:& 有false则false
或:| 有true则true
异或:^ 相同则false,不同则true
非:! true则false,false则true
public class Demo08Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) & (a > c));// false & false
System.out.println((a < b) & (a > c)); // true & false
System.out.println((a > b) & (a < c)); // false & true
System.out.println((a < b) & (a < c)); // true & true
System.out.println("---------------");
System.out.println((a > b) | (a > c));// false | false
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a > b) | (a < c)); // false | true
System.out.println((a < b) | (a < c)); // true | true
System.out.println("---------------");
System.out.println((a > b) ^ (a > c));// false ^ false
System.out.println((a < b) ^ (a > c)); // true ^ false
System.out.println((a > b) ^ (a < c)); // false ^ true
System.out.println((a < b) ^ (a < c)); // true ^ true
System.out.println("---------------");
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
}
}
&&和&的区别
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
public class Demo09Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) && (a > c));// false && false
System.out.println((a < b) && (a > c)); // true && false
System.out.println((a > b) && (a < c)); // false && true
System.out.println((a < b) && (a < c)); // true && true
System.out.println("---------------");
System.out.println((a > b) || (a > c));// false || false
System.out.println((a < b) || (a > c)); // true || false
System.out.println((a > b) || (a < c)); // false || true
System.out.println((a < b) || (a < c)); // true || true
System.out.println("---------------");
int x = 3;
int y = 4;
// System.out.println((x++ > 4) & (y++ > 5)); // false & false
System.out.println((x++ > 4) && (y++ > 5)); // false && false
System.out.println("x:" + x);
System.out.println("y:" + y);
}
}
6、 三元运算符
接下来我们要学习的三元运算符与之前的运算符不同。之前学习的均为一元或者二元运算符。元即参与运算的数据。
格式:(条件表达式)?表达式1:表达式2;
表达式:通俗的说,即通过使用运算符将操作数联系起来的式子,例如:
3+2,使用算数运算符将操作数联系起来,这种情况,我们称为算数表达式。
3>2,使用比较运算符(也称为条件运算符)将操作数联系起来,这种情况,我们称为条件表达式。
其他表达式,不再一一举例。
三元运算符运算规则:
先判断条件表达式的值,若为true,运算结果为表达式1;若为false,运算结果为表达式2。
注意:
三元运算符,最终一定会产生一个结果值,这个值必须被使用起来。
要么被运算符使用,要么被打印
/*
三元运算符:求两个数的最大值,判断两个数是否相等
格式:
(条件表达式) ? 表达式1 : 表达式2;
执行流程:
首先判断条件表达式是否成立
true:表达式1作为3元运算符的结果
false:表达式2作为3元运算符的结果
注意:
三元运算符,最终一定会产生一个结果值,这个值必须被使用起来。
要么被运算符使用,要么被打印
*/
public class Demo10Operator{
public static void main(String[] args){
int a = 10;
int b = 20;
int max = (a > b) ? 10 : 20;
System.out.println("max = " + max);
int c = 15;
int d = 10;
//System.out.println((c != d) ? "相等" : "不相等");
String s = (c != d) ? "相等" : "不相等";
System.out.println("s = " + s);
//(c != d) ? "相等" : "不相等";//错误: 不是语句
//3;//错误: 不是语句
}
}
7、运算符优先级
7.1、优先级概念
运算符运算的先后顺序,优先级越高(数字越小),计算顺序越靠前。
7.2、优先级规则
优先级相同的情况下,按照从左到右的顺序依次运算
优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘除,取余 *、/、%
5 加减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ?:
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=