运算符
运算符包括:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 赋值运算符
- 特殊的“+”运算符
- 三元运算符/三目运算符
一、Java语言中的算术运算符
/*
关于java编程中运算符:算术运算符
+ 求和
— 求差
* 乘积
/ 商
% 求余数【取模】
++ 自加1
-- 自减1
注意:
一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升
*/
public class OperatorTest01
{
public static void main(String[] args){
int i = 10;
int j = 3;
System.out.println(i + j); //13
System.out.println(i - j); //7
System.out.println(i * j); //30
System.out.println(i / j); //3
System.out.println(i % j); //1
//1、关于++运算符【自加1】
int k = 10;
//运算符可以出现在变量后面【单目运算符】
k++;
System.out.println(k); //11
int x = 10;
//++运算符可以出现在变量之前【单目运算符】
int y = 10;
++y;
System.out.println(y); //11
//小结:++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后
//只要++运算结束,该变量值一定会自加1
//++出现在变量后
//规则:先做赋值运算,再对变量中保存的值进行自加1
int a = 100;
int b = a++;
System.out.println(a); //101
System.out.println(b); //100
//++ 出现在变量前
//规则:先进行自加1运算,然后在进行赋值运算
int m = 20;
int n = ++m;
System.out.println(m); //21
System.out.println(n); //21
//运算后加1
int w = 10;
System.out.println(w++); //10
System.out.println(w); //11
//先进行自加1操作
int v = 20;
System.out.println(++v); //21
System.out.println(v); //21
//2、关于--的操作
int p = 11;
System.out.println(p--); //11
int q = 11;
System.out.println(--q); //10
}
}
二、Java中的比较运算符
/**
逻辑运算符
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
= 一个等号代表赋值
== 两个等号判断是否相等
*/
public class OperatorTest02
{
public static void main(String[] args){
int a = 10;
int b = 10;
System.out.println(a > b); //false
System.out.println(a < b); //false
System.out.println(a == b); //true
System.out.println(a >= b); //false
System.out.println(a <= b); //false
System.out.println(a != b); //false
}
}
三、Java中的逻辑运算符
/*
逻辑运算符:
& 逻辑与(两边的算子都为真,结果才是真)
| 逻辑或(两边的算子只要有一个是true,结果就为true)
! 逻辑非(取反,!false就是true,!true就是false,这是一个单目运算符)
^ 逻辑异或(两边的算子只要不一样,结果就是true)
&& 短路与
|| 短路或
1、逻辑运算符要求两边的算子都是布尔类型,并且最终的运算结果也是布尔类型
2、短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象。
3、短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象。
4、什么情况下发生短路现象?
5、什么时候选择使用逻辑与运算符?什么时候选择使用短路与运算符?
*/
public class OperatorTest03
{
public static void main(String[] args)
{
System.out.println(5>3 & 5>2); //true
System.out.println(5>3 & 5>6); //false
System.out.println(5>3 | 5>6); //true
System.out.println("--------");
//逻辑与
System.out.println(true & true); //true
System.out.println(true & false); //false
System.out.println("--------");
//逻辑或
System.out.println(true | false); //true
System.out.println("--------");
//逻辑非
System.out.println(!true); //false
System.out.println(!false); //true
System.out.println("---------");
//逻辑异或
System.out.println(true ^ false); //true
System.out.println(false ^ false); //false
System.out.println(true ^ true); //false
System.out.println("---------");
//逻辑与和短路与
int x = 10;
int y = 8;
//逻辑与:表达式的两边都会走
System.out.println(x<y & ++x<y); //false
System.out.println(x); //11
System.out.println("---------");
//短路与:第一个表达式不成立,第二个表达式就不再执行
int a = 3;
int b = 5;
System.out.println(b<a && ++b<a); //false
System.out.println(b); //5
/*
从某个角度来看,短路与更智能,由于后边的表达式可能不执行,
所以执行效率比较高。这种方式在实际的开发中使用较多。
短路与比逻辑与使用的多。短路与更常用。
但是:在某些特殊的业务当中,要求运算符两边的算子必须全部执行,
此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的表达式不执行。
*/
/*
什么情况下发生短路或?
第一个表达式执行结果是true,会发生短路或
什么情况下发生短路与?
第一个表达式执行结果是false,会发生短路与。
*/
}
}
四、java语言中的赋值运算符
/*
关于java中的赋值运算符:
赋值类运算符包括两种:
* 基本的赋值运算符
=
* 扩展的赋值运算符
+=
-=
*=
/=
%=
1、赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边
2、注意以下代码:
byte i = 10;
i += 5;等同于:i = (byte)(i+5);
int k = 10;
k += 5;等同于:k = (int)(k+5)
long x = 10L;
int y = 20;
y += x; 等同于:y = (int)(y+x)
3、扩展类的赋值运算符不改变运算结果类型,假设最初的类型是byte,
无论怎么追加或者追减,最终的数据类型仍然为byte。超出范围时
可能会损失精度
*/
public class Operator01
{
public static void main(String[] args){
//基本的赋值运算符
int i =10;
System.out.println(i); //10
i = i + 5;
System.out.println(i); //15
//扩展的赋值运算符【+= 运算符可以翻译为】
i += 5; //等同于:i=i+5;
System.out.println(i); //20
i -= 5; //等同于:i = i - 5
System.out.println(i); //15
i *= 2; //等同于:i = i*2
System.out.println(i); //30
i /= 4; //等同于:i = i/4
System.out.println(i); //7
i %= 2; //等同于:i=i % 2
System.out.println(i); //1
System.out.println("-----------");
byte b = 10;
//编译错误,
//编译器只检查语法,不运行程序,编译器发现b+5的类型是int类型
//大容量向小容量转换需要加强制类型转换,所以以下程序编译报错
//b =b + 5;
//纠正错误
b = (byte)(b+5);
System.out.println(b); //15
byte x = 10;
x += 5; //等同于:x = (byte)(x+5);
System.out.println(x); //15
byte z = 0;
z += 128; //等同于:z=(byte)(z+128);
System.out.println(z); //-128
}
}
五、关于java语言中的“+”运算符
/*
关于java中的"+"运算符:
1、+运算符在java中有两个作用
* 加法作用
* 字符串的链接运算
2、当“+”运算符两边的数据都是数字的话,一定是进行加法运算。
3、当“+”运算符两边的数据只要有一个数据是字符串,一定会进行字符串的拼接运算。
并且,链接之后的结果还是是一个字符串类型。
数字 + 数字 -----> 数字【求和】
数字 + “字符串” -------> “字符串”【字符串拼接】
4、在一个表达式当中可以出现多个“+”,在没有小括号时,按照从左到右的顺序执行
*/
public class Operator02
{
public static void main(String[] args){
//要求:在屏幕中输出10+20=30
int i = 10;
int j = 20;
System.out.println(i+"+"+j+"="+(i+j));
//字符串用法
String username = "zhangsan";
System.out.println("欢迎"+username+"回家!");
String name = "lisi";
System.out.println("欢迎"+name+"回家!");
}
}
六、java语言中的三元运算符
/*
三元运算符/三目运算符/条件运算符
1、语法规则:
布尔表达式 ? 表达式1 : 表达式2
2、三元运算符的执行原理?
当布尔表达式的结果是true时,选择表达式1作为整个表达式的结果
当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果
*/
public class Operator03
{
public static void main(String[] args){
// 编译报错:不是完整的语句
// 10;
// 编译报错:不是完整的语句
// '男';
// 编译报错:不是完整的语句
// boolean sex = true;
// sex ? '男':'女';
//编译通过
boolean sex = true;
char c = sex ? '男':'女';
System.out.println(c); // 男
// 错误: 不兼容的类型: 条件表达式中的类型错误
// char m = sex ? "男":'女';
// 纠正
System.out.println(sex ? '男':"女的"); //男
}
}