运算符
1.算数运算符
符号 | 意思 |
---|---|
+ | 求和 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模【求余数】 |
++ | 自增1 |
– | 自减1 |
注:一个表达式中有多个运算符,运算符有优先级,若不确定加小括号。没必要专门记忆运算符优先级
public class Operator{
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
//关于自增自减
int k = 10;
//++运算符可以单独出现在变量后面,也可以单独出现在变量前面。
k++;
System.out.println(k); //11
int y = 10;
++y;
System.out.println(y);//11
//++ 出现在变量后,先使用值,再自增
int a = 100;
int b = a ++; //先赋值再运算
System.out.println(a); //101
System.out.println(b); //100
//++ 出现在变量前,先自增,再使用自增后的值
int c = 100;
int d = ++c; //先运算,再赋值
System.out.println(d); //101
//例子,打印要一条一条打,因为不管自增符号在前还是在后,最后数字都要自增。
int e = 200;
System.out.println(e++); //200
//System.out.println(++e); //201
//System.out.println(e--); //200
//System.out.println(--e); //199
}
}
2.关系运算符
符号 | 意思 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
注:“=”是赋值运算符,“==”是关系运算符。
*关系运算符运算结果一定是布尔类型:true/false
关系运算符的运算原理:
a > b 比较的时候,比较的是a中保存的值跟b中保存的值之间的大小比较。其中a与b不一定是整数型,也可以是字符型等。
public class Opeartor{
public static void main(String[] args){
int a = 10;
int b = 10;
System.out.println(a > b); //false
System.out.println(a >= b); // true
System.out.println(a < b); //false
System.out.println(a <= b); // true
System.out.println(a == b); // true
System.out.println(a != b); //false
}
}
3.逻辑运算符(布尔运算符)
符号 | 意思 | 运算 |
---|---|---|
& | 逻辑与【并且】 | 两边都是true,结果是true |
| | 逻辑或【或者】 | 只要两边有一个是true,结果就是true |
! | 逻辑非 | 取反 " !false “就是true;” !true " 就是 false |
^ | 逻辑异或 | 两边不一样,就是true |
&& | 短路与 | 运算跟单个" & "一样 |
|| | 短路或 | 运算跟单个" | "一样 |
(1)逻辑运算符两边都是布尔类型,并且逻辑运算符最终运算结果也是布尔类型。
(2)短路与和逻辑与运算结果是相同的,只不过短路与存在短路现象。
(3)短路或和逻辑与运算结果是相同的,只不过短路或存在短路现象。
public class OperatorTest{
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(true & true); //true
System.out.println(true & false); //false
System.out.println(false & true); //false
System.out.println(false & false); //false
System.out.println(true | false); //true
System.out.println(false | false); //false
System.out.println(!true); // false
System.out.println(!false); //true
System.out.println(true ^ false); //true
System.out.println(false ^ false); //false
System.out.println(true ^ true); //false
}
}
而逻辑与和短路与二者的区别在于:前者前后两个都运行,后者第一个表达式执行结果为false就停止运行,这种现象被称为短路现象。
public class OperatorTese{
public static void main(String[] args){
//逻辑与
int x = 10;
int y = 8;
System.out.println(x < y & ++x <y);
System.out.println(x); //11
//短路与
int x2 = 10;
int y2 = 8;
System.out.println(x2 <y2 && ++x2 < y2);
System.out.println(x2); //10
}
}
同理,逻辑或和短路或二者区别在于:前者前后两个都运行,后者第一个表达式执行结果为true就停止运行。
//逻辑或
int x = 10;
int y = 8;
System.out.println(x < y | ++x <y);
System.out.println(x); //11
//短路或
int x2 = 10;
int y2 = 8;
System.out.println(x2 > y2 || ++x2 < y2);
System.out.println(x2); //10
*从某种角度来说,短路的与(或)更智能。由于后面的表达式可能不执行,所以执行效率较高。这种双符号表示的短路在实际开发中使用较多,更常用。
*但是,在某些特殊业务逻辑当中,要求运算符两边的算子必须全部执行,此时必须用逻辑与(或),不能用短路与(或),使用短路的可能会导致右边表达式不执行。
4.赋值类运算符
(1)基本的赋值运算符:=
(2)扩展的赋值运算符:+=,-=,*=,/=,%=(注:在计算的时候不改变结果类型,在运算的时候采用强制类型转换)
赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量。
public class OperatorTest{
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 = (int)(i + 5); 和 i = i + 5 不太一样。
System.out.println(i); //20
i-=5;//等同于 i = (int)(i - 5);
System.out.println(i); //15
i *= 2;//等同于 i = (int)(i * 2);
System.out.println(i); //30
i /= 4;//等同于 i = (int)(i / 4);
System.out.println(i); //7
i%=2; //等同于 i = (int)(i % 2);
System.out.println(i); //1
}
}
但是在某些运算的时候,会转化为默认类型计算,再赋值会导致编译错误。
public class OperatorTest{
public static void main(String[] args){
byte b = 5;
//b = b + 5;编译报错,因为b+5在运算的时候会转化为int类型。
//这里正确语法
b = (byte) (b+5);
byte x = 5;
x += 5;// x+=5 等同于 x = (byte) (x + 5)
System.out.println(x); //10
}
}
5.字符串连接运算符
“+”运算符在java语言中有两个作用:
(1)加法运算,求和。
(2)字符串的连接运算
*当“+”运算符两边的数据都是数字的话一定是做加法运算,只要有一遍是字符串,一定会进行字符串连接运算。并且运算后的结果还是一个字符串类型。
数字 + 数字 ——> 数字【求和】
数字+ “字符串” ——> “字符串”【字符串连接】
(3)在一个表达式当中出现多个“+”,在没有添加小括号的情况下,遵循自左向右的顺序依次运算。
public class OperatorTest{
public static void main(String[] args){
int a = 10;
int b = 20;
//要求在控制台上输出:10 + 20 = 30 (动态)
System.out.println(a + " + " + b + " = " + (a+b));
}
}
引用类型String,String是JavaSE当中提供的字符串类型(String.class字节码文件)。
//int是基本数据类型,i是变量名,10是int类型的字面值
int i = 10;
//String是引用类型,s是变量名,“abc"是String类型的字面值
String s = "abc";
写一个String变量,起名username,动态打印“登录成功,欢迎username回来"。
public class OperatorTest{
public static void main(String[] args){
String username = "coffee add ice";
System.out.println("登录成功,欢迎" + username + "回来");
}
}
6.三元运算符(三目运算符/条件运算符)
(1)语法规则:
布尔表达式 ? 表达式1 :表达式2
(2)三元运算符的执行原理:如果布尔表达式为true就执行表达式1,为false就执行表达式2。
public class OperatorTest{
public static void main(String[] args){
boolean sex = false;
char c = sex ? '男' : '女';
System.out.println(c); //女
sex =true;
c = sex ?'男' :'女';
System.out.println(c); //男
System.out.println(sex ? "男" : '女');
//可以编译
//但是 c=sex ? "男" : '女'; 这个语句会报错
}
}
——本章节为个人学习笔记。学习视频为动力节点Java零基础教程视频:动力节点—JAVA零基础教程视频