运算符
1.算术运算符
1.1 运算符与表达式
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合Java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式
举例说明:
int a=10;
int b=20;
int c=a+b;
+:是运算符,并且是算术运算符
a+b:是表达式,由于+是算术运算符,所以这个表达式叫做算术表达式。
1.2 算术运算符
符号 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
package Operator;
/*
算数运算符
*/
public class OperatorDemo01 {
public static void main(String[] args) {
//定义两个变量
int a=6,b=4;
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);
}
}
运行结果:
10
2
24
1 //两个int型的数据算术运算的结果还是int 型,所以相除结果只保留整数。
2
1.3字符的“+”操作
拿字符进行“+”时,是拿字符在计算机底层对应的数值来进行计算的
package Operator; public class OperatorDemo02 { public static void main(String[] args) { int i=10; char c1=‘A‘; char c2=‘B‘; System.out.println(i+c1); System.out.println(c1+c2); } }
运行结果:
75
131
算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
byte类型,short类型和char类型将被提升到int类型。
整个表达式的类型自动提升到表达式中最高等级操作数同样的类型。等级顺序:byte,short,char -> int -> long -> float -> double
package Operator; public class Test3 { public static void main(String[] args) { char a=‘A‘; int b=20; double c=30.0; System.out.println(a+b); System.out.println(b+c); } }
运行结果:
85 //char型a与int型b相加,结果为int型
50.0 //int型b与double型c相加,结果为double型
1.4.字符串的“+”操作
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符。
System.out.println("Java"+"语言"); System.out.println("Java语言"+666); System.out.println(666+"Java语言"); System.out.println("Java语言"+6+66); System.out.println(6+"Java语言"+66);
Java语言
Java语言666
666Java语言
Java语言666
6Java语言66字符串与字符串、字符串与数字中间出现“+”时,表示将他们连接起来,结果是字符串。
System.out.println(6+66+"Java语言");
72Java语言
出现多个“+”时,从左到右依次执行操作,数字与字符串、字符串与字符串之间的“+”是字符串连接符,但数字与数字之间的“+”仍是算术运算符。
2.赋值运算符
3.自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 自增 | 变量的值加1 |
-- | 自减 | 变量的值减1 |
++和--即可以放在变量的后边,也可以放在变量的前边。
单独使用时,++和--无论是放在变量的前边还是后边,结果都一样。
int i=10; System.out.println("i:"+i); i++; System.out.println("i:"+i); ++i; System.out.println("i:"+i);
运行结果:
i:10
i:11
i:12参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。如果放在变量的前边,先拿变量做++或者--,后拿变量参与运算。
int i=10,j; j=i++; System.out.println("i:"+i); System.out.println("j"+j); j=++i; System.out.println("i:"+i); System.out.println("j:"+j);
运行结果:
i:11
j10
i:12
j:12
有如下代码:
int a=5;
int b=(a++)+(--a)+(++a);
问执行完之后,b的结果是多少?
结果:16
a=6 a=5 a=6
(a++) + (--a) + (++a)
? 5 + 5 + 6 = 16
4.关系运算符
关系运算符的结果都是boolean类型,要么是true,要么是false。
“==”是关系运算符,用于判断两边是否相等,“=”是赋值运算符,用于把符号后的值赋给符号前的变量。
5.逻辑运算符
逻辑运算符:用来连接关系表达式的运算符,也可以直接连接布尔类型的常量或者变量。
操作符 | 语义 | 描述 |
---|---|---|
&& | 与(并且) | 两个操作数,同时为真,结果为真 |
|| | 或(或者) | 两个操作数,有一个为真,结果为真 |
! | 非(取反) | 意为“不是”,结果与跟的表达式相反 |
&& 短路与 表示要求两个或者多个表达式同时成立 则结果为真,如果第一个表达式不成立 则后续的表达式不再执行
int i=10,j=5; System.out.println((--i>9)&&(++j)<7); System.out.println("i:"+i+" j:"+j);
运行结果:
false
i:9 j:5 //因为&&为短路与,(--i>9)为假,后续操作不再执行,所以输出的j仍是5.& 与 表示要求两个或者多个表达式同时成立 则结果为真 没有短路的效果,不管第一个表达式结果如何 都将执行完所有的表达式
int i=10,j=5; System.out.println((--i>9)&(++j)<7); System.out.println("i:"+i+" j:"+j);
运行结果:
false
i:9 j:6 //&没有短路效果,后面的++j继续执行。|| 短路或 表示要求两个或者多个表达式有一个成立 则结果为真,如果第一个表达式成立 那么后续的不再执行
| 或 表示要求两个或者多个表达式有一个成立 则结果为真
| 没有短路的效果 不管第一个表达式结果如何 都将执行完所有的表达式
6.三元运算符
格式:关系表达式?表达式1:表达式2;
示例:a>b?a:b;
计算规则:
首先计算关系表达式的值
如果值为真(true),表达式1的值就是运算结果
如果值为假(false),表达式2的值就是运算结果
int a=10,b=5; System.out.println(a>b?a:b); System.out.println(5>10?a:b);
运行结果
10
5