运算符
Java语言支持如下运算符:
-
算术运算符:+,-,*,/,%(Java中叫模运算即求余),++,–
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=instanceof.
!=:bu不等于。
-
逻辑运算符:&&,||,!。
与 或 非
-
位运算符:&,|,^,~,>>,<<,>>>(只做了解)
-
条件运算符: ? :
-
拓展赋值运算符:+=,-=,*=,/=
用代码演示
算术运算符
public class Demo02 {
public static void main(String[] args){
//算术运算符
int a=10;
int b=20;
int c=12;
int d=30;
System.out.println(c%a)
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3g7IzZV-1631009031023)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210904095010035.png)]
public class Demo03 {
public static void main(String[] args){
long a=2002122020021221l;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOddP2OJ-1631009031025)(D:\JAVA学习图片\java变量常量作用域\09.png)]
public class Demo03 {
public static void main(String[] args){
long a=2002122020021221l;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println((String) (c+d));//int
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jZlaQky-1631009031027)(D:\JAVA学习图片\java变量常量作用域\08.png)]
自动升为混合运算最高类型。
运算规则,先转为同类型最高运算符进行运算。
关系运算符
关系运算符返回的结果:正确,错误 即布尔值
public class Demo04 {
public static void main(String[] args){
int a=10;
int b=20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnFx8Cgw-1631009031029)(D:\JAVA学习图片\java运算符\01.png)]
与选择结构一起使用。
自增自减运算符
只需要一个数,所以也叫做一元运算符。
public class Demo04 {
public static void main(String[] args){
int a=3;
int b=a++;//执行完这行代码后,先给b赋值,再自增。
//a=a+1
System.out.println(a);
int c=++a;//执行完这行代码前,先自增,再给c赋值。
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQtJ2V8t-1631009031030)(D:\JAVA学习图片\java运算符\02.png)]
a++
先赋值再自增。
++a
先自增再赋值
自减同理
逻辑运算符
- &&:逻辑与运算:两个变量都为真,结果才为true。
- ||:逻辑或运算:只要两个变量有一个为真,结果就为真。
- !:如果是真则变为假,如果是假则变为真。
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a=true;
boolean b=false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为true。
System.out.println("a||b:"+(a||b));//逻辑或运算:只要两个变量有一个为真,结果就为真。
System.out.println("!(a&&b):"+(!(a&&b)));//如果是真则变为假,如果是假则变为真。
}
}
短路原则
上述代码若为
```java
System.out.println("b&&a:"+(b&&a));
```
则因为因为 b是假的a是真的一开始发现b是假的而直接不看后面的a而直接返回假
public class Demo05 {
public static void main(String[] args) {
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(c);
System.out.println(d);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUckfqxi-1631009031031)(D:\JAVA学习图片\java运算符\03.png)]
发现输出的c不是6,由此可知短路原则成立。
位运算符
public class Demo05 { public static void main(String[] args) { /* A=0011 1100 B=0000 1101 A&B A与B 将A与B比较两个相同位置的数位1则为1,否则就是0. 0000 1100 A|B A或B 对应位为0则为0,有一个1则为1. 0011 1101 ~B 取反 0010 亦或运算:A^B 对应位相同为0,不相同为1 0011 0001 面试题: 2*8怎么运算最快? 2*8=16;2*2*2*2 <<左移 *2 >>右移/2 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0011 4 0000 1000 8 0001 0000 16 */ System.out.println(2<<3); }}
位运算效率极高。
要深究的话要学习计算机的底层逻辑
三元运算符
public class Demo04 { public static void main(String[] args){ int a=10; int b=20; a+=b;//a=a+b a-=b;//a=a-b System.out.println(a); //字符串连接符 +,String 在+号两侧只要出现了string类型就会把另外的操作数都转换为String类型进行连接 System.out.println(a+b); System.out.println(""+a+b); System.out.println(a+b+"");//如果字符串在后面先运算再拼接。 }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IwpQ3cC-1631009031032)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210904164053515.png)]
? :
public class Demo04 { public static void main(String[] args){ //x?y:z //如果x==true,则结果为y,否则结果为z int score=80; String type= score<60 ?"不及格":"及格"; /* score<60 ?"不及格":"及格";会返回出一个结果 需要用用string类型接收 所以定义一个type。接收该值。 */ System.out.println(type); }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qx80lwsf-1631009031033)(D:\JAVA学习图片\java运算符\05.png)]
优先级
括号优先级最高