运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。它是一种特殊的符号,用以表示数据的运算、赋值和比较等,在Java中的数据都是通过运算符来操作的
运算符按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符,位运算符、条件运算符
按照操作数个数分为:
本章将对java各类型的运算符进行分类阐述
Java基本算术运算符包括7个,它与其他大多数程序设计语言相同,包括加(+)、减(-)、乘(*)、除(/)、取余(%)、正号(+)、负号(-)、自增(++)、(自减)--
加、减、乘、除、取余、正号、负号
public class ArithmeticTest0 {
public static void main(String[] args) {
int a = 15;
int b = 10;
System.out.println("两数相加:"+ (a+b));
System.out.println("两数相减:"+ (a-b));
System.out.println("两数相乘:"+ (a*b));
System.out.println("两数相除:"+a/b);
System.out.println("两数取余:"+a%b);
System.out.println("正号:"+(+a));
System.out.println("负号:"+(-b));
}
}
运行结果:
两数相加:25
两数相减:5
两数相乘:150
两数相除:1
两数取余:5
正号:15
负号:-10
public class ArithmeticTest {
public static void main(String[] args) {
String str = "Hello";
System.out.println(str+ "World");//表示将两个字符串进行拼接
System.out.println(str+ 5 + 20); // Java520
}
}
运行结果
HelloWorld
Hello520
++运算,表示自增1。同理,-- 运算,表示自减1
public class ArithmeticTest {
public static void main(String[] args) {
int a = 3;
System.out.println("变量前++:"+(++a));
System.out.println("变量后++:"+(a++));//a++不会自增,直接输出++a后的值
}
}
运行结果
a变量前++:4
a变量后++:4
变量前++ :变量先自增 1,然后再运算
变量后++ :变量先运算,然后再自增 1
public class ArithmeticTest{
public static void main(String[] args) {
int x = 3;
int y = 4;
//++x后x的的值变为 4 ,再加y的值,所以最终相加的结果位:8
System.out.println("变量前++:"+(++x + y));
x = 3;
//x的值为3,再加y的值为4,所以最终相加的结果位:7 y++不会自增1
System.out.println("变量后++:"+ (x + y++));
//由于在(x+y++) y运算后自增了1,所以此时y的值变为:5
System.out.println("运算后y的值:"+ y);
}
}
运行结果:
变量前++:8
变量后++:7
运算后y的值:5
1、符号:=
public class SetValueTest {
public static void main(String[] args) {
int i = 10;
long k = i; //将i=10赋值给变量k,自动类型转换(变量k的数据类型取值范围比int大)
byte h = (byte)i;//将i赋值给h强制类型转换 (变量h的数据类型取值范围比int小大)
int j , q;
j = q = 20; //连续赋值语法
}
}
运算符 |
说明 |
+= |
将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= |
将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= |
将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= |
将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= |
将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
示例如下:
public class SetValueTest2 {
public static void main(String[] args) {
//举例说明+= -= *= /= %=
int i = 10;
i += 5; //其计算方式: i = i+ 5
System.out.println("i+=后的结果:" +i);//其计算结果为:15
int j = 10;
j -=2;
System.out.println("j-=后的结果:" +j);//其计算结果为:8
int k = 10;
k *= 10;
System.out.println("k*=后的结果:" +k);//其计算结果为:100
int l = 10;
l /= 2;
System.out.println("l/=后的结果:" +l);//其计算结果为:5
int m = 20;
m %=7;
System.out.println("m%=后的结果:" +m);//其计算结果为:6
}
}
运行结果:
i+=后的结果:15
j-=后的结果:8
k*=后的结果:100
l/=后的结果:5
m%=后的结果:6
关系运算符包括大于 (>) 、 小于(<) 、等于(==)、大于或等于(>=)、小于或等于(<=)、不等于(!=)
public class CompareTest {
public static void main(String[] args) {
int i = 10;
int j = 20;
System.out.println("变量i大于j:"+(i>j));//结果为:false
System.out.println("变量i小于j:"+(i= j));//结果为:false
System.out.println("变量i小于等于j:"+ (i <= j));//结果为:true
}
}
运行结果:
变量i大于j:false
变量i小于j:true
变量i等于j:false
变量i不等于j:true
变量i不等于j:false
变量i不等于j:true
关系运算符中等于(==)和不等于(!=)适用于所有的基本数据类类型,同时也适用于所有对象。在进行对象比较时,其比较的是对象的引用,而不是对象的内容,示例如下:
public class CompareEquivalence {
public static void main(String[] args) {
Integer i = new Integer(47);
Integer k = new Integer(47);
System.out.println("对象i等于k:"+(i==k));
System.out.println("对象i不等于k:"+(i!=k));
}
}
根据常规逻辑:第一条输出语句输出的结果应该为 true,第二条语句输出的结果应该为 false,因为两个对象的值都是相同的(47),但事实不是这样的。输出结果如下运行结果:
对象i等于k:false
对象i不等于k:true
虽然两个对象的内容一样,都是47,但这两个对象的引用是不一样的,所以等于(==)和不等于(!=)在比较两个对象时,比较的是两个对象的引用,而不是对象的内容。
在java中要比较两个对象的内容是否相同,使用equals()方法进行,具体的用法在后续的章节中阐述。
逻辑运算符,操作的都是 boolean 类型的变量或常量,用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean类型值
短路与(&&), 短路或(||)、取反(!) 逻辑与(&)、逻辑或(|)、 逻辑异或(^)
其基本规则如图:
& 和 &&比较:
&& :如果符号左边是 false,则不再继续执行符号右边的操作
在实际开发中,推荐使用 &&
| 和 ||:
|| :如果符号左边是 true,则不再继续执行符号右边的操作
在实际开发中,推荐使用 ||
在java中位运算符包括以下7个:
位右移(>>)、位左移(<<) 、无符号右移(>>>)、按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
位运算符的运算过程都是基于二进制的补码运算,各运算符发运算规则如下:
1 & 1 结果为 1
1 & 0 结果为 0
0 & 1 结果为 0
0 & 0 结果为 0
1 | 1 结果为 1
1 | 0 结果为 1
0 | 1 结果为 1
0 |0 结果为 0
1 ^ 1 结果为 0
1 ^ 0 结果为 1
0 ^ 1 结果为 1
0 ^ 0 结果为 0
~0 就是 1
~1 就是 0
符号 : ?:
语法格式: (条件表达式)? 表达式a:表达式b ,
解释: 条件表达式是 boolean 类型的结果,根据 boolean 的值选择表达式a 或表达式b
示例如下:
/**
* 获取三个数中的最大值
*/
public class ConditionExer {
public static void main(String[] args) {
int i = 43;
int j = 33;
int k = 73;
int tempMax = (i > j)? i:j;
int finalMax = (tempMax > k)? tempMax : k;
System.out.println("三个数中最大值为:" + finalMax);
}
}
运行结果:
三个数中最大值为:73
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序 ,当一个表达式中存在多个操作符时,操作符的优先级就觉得了各部分的计算顺序
优先级 |
运算符说明 |
运算符 |
1 |
括号 |
()、[]、{} |
2 |
正负号 |
+、- |
3 |
单元运算符 |
++、--、~、! |
4 |
乘法、除法、求余 |
*、/、% |
5 |
加法、减法 |
+、- |
6 |
移位运算符 |
<<、>>、>>> |
7 |
关系运算符 |
<、<=、>=、> |
8 |
等价运算符 |
==、!= |
9 |
按位与 |
& |
10 |
按位异或 |
^ |
11 |
按位或 |
| |
12 |
条件与 |
&& |
13 |
条件或 |
|| |
14 |
三元运算符 |
? : |
15 |
赋值运算符 |
=、+=、-=、*=、/=、%= |
16 |
位赋值运算符 |
&=、|=、<<=、>>=、>>>= |