运算符(operator)
Java 支持如下运算符:
-
算术运算符: +,-,*,/,%,++,–
-
赋值运算符 = 关系运算符: >,<,>=,<=,==,!= instanceof
-
*逻辑运算符: &&,||,!
-
*位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
-
*条件运算符 ?:
-
扩展赋值运算符:+=,-=,=,/=
1、二元运算符
有两个操作数的叫二元运算符
public class Demo01 {
public static void main(String[] args) {
// 二元运算符
//Ctrl + D : 复制当前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b); //30
System.out.println(a-b); //-10
System.out.println(a*b); //200
System.out.println(a/b); //0 10除20明明等于0.5,这里的结果是int类型,0.5是double类型,所以小数点直接被截掉了
System.out.println(a/(double)b); //0.5 正确写法,一定要注意作用范围
}
}
整数运算和浮点运算
整数运算
如果两个操作数有一个为Long, 则结果也为long 没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
浮点运算
如果两个操作数有一个为double, 则结果为double. 只有两个操作数都是float, 则结果才为float.
【演示】
public class Demo02 {
public static void main(String[] args) {
long a = 123123123123123L;
int b = 123;
short c = 10;
byte d = 8;
double e = 1.5;
System.out.println(a+b+c+d); //long类型
System.out.println(b+c+d); //Int类型
System.out.println(c+d); //Int类型
System.out.println(a+c+d+e); //double类型
/*
如果多个操作数中有一个数为long类型,则最终结果也一定是Long类型的
没有Long时,所有非int类型转为Int类型,即操作数全为shot,byte,结果也是int.
如果有double,则运算结果也为double
*/
}
}
关系运算符
返回结果为布尔值!(ture或false)
public class Demo03 {
public static void main(String[] args) {
// 关系运算符返回的结果: 正确, 错误 布尔值
//跟if一起用
int a = 10;
int b = 20;
System.out.println(a>b); //false
System.out.println(a>=b); //false
System.out.println(a<b); //true
System.out.println(a<=b); //true
System.out.println(a==b); //false
System.out.println(a!=b); //true
}
}
2、取模运算
取模就是以前学的取余 如10%3 余 1
要点:
负数%负数=负数;
负数%正数=负数;
正数%负数=正数;
public static void main(String[] args) {
System.out.println(9 % 4); //1
System.out.println(-9 % -4); //-1
System.out.println(-10 % 4); //-2
System.out.println(9 % -4); //1
}
3、一元运算符
自增(++)自减(–)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算, 而自增自减运算符是一个操作数,分为前缀和后缀两种。
public class Demo04 {
public static void main(String[] args) {
//一元运算符
//++ 自增
//-- 自减
int a = 3;
int b = a++; //执行完这行代码后,b=3。先给b赋值,a再自增
//a++ 相当于隐藏了a = a + 1,先执行完,a再+1
System.out.println(a); //4
//++a 相当于隐藏了a = a + 1,a先+1,再执行
int c = ++a; //执行完这行代码后,c=5。a先自增,再给b赋值
System.out.println(a); //5
System.out.println(b); //3
System.out.println(c); //5
}
}
Java中的乘幂处理
public static void main(String[] args) {
int a = 3^2; //java中不能这么处理, ^是异或符号。
double b = Math.pow(3, 2);
}
Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法!
4、逻辑运算符
逻辑与:&&和&
逻辑或:||和|
逻辑非:!
【演示】
//逻辑运算符 (与 或 非)
public class Demo05 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a && b)); //逻辑与运算:两个变量都为真,结果才为真(true)
System.out.println("a || b:"+(a || b)); //逻辑或运算:两个变量有一个为真,结果才为真(true)
System.out.println("!(a && b):"+!(a && b)); //逻辑非运算:如果是真,则变为假,如果是假,则变为真
短路运算
逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为 true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断 第二个操作了。
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4); //(c<4)已经是假false的,所以与运算&&后面的(c++<4)执行
System.out.println("===============================================");
System.out.println(d); //false
System.out.println(c); //输出结果为5,说明c++没有执行
}
}
/*
解析: 该程序使用到了短路逻辑运算符(&&),首先判断 a<4 的结果为 false,则 d 的结果必定是 false,所以不再执行第二个操作 a++<4 的判断,所以 a 的值为 5。
*/
逻辑与只要有一个为false, 则直接返回false.
逻辑或只要有一个为true, 则直接返回true;
5、位运算符
位运算符作用在所有的位上,并且按位运算。
//位运算(计组学过)
public class Demo06 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
---------------------------------
A&B 0000 1100 (与)
A|B 0011 1101 (或)
A^B 0011 0001 (异或)
~B 1111 0010 (取反)
*/
/*
面试题:2*8怎么运算最快?
可将其拆分成 2*2*2*2
<< 左移 相当于*2 二进制往左移
>> 右移 相当于/2 二进制往右移
*/
System.out.println(2<<3);
/*
解析:
2*8相当于2*2*2*2 相当于二进制数0000 0010把1左移3位
得0001 0000就是十六
*/
}
}
6、扩展运算符
【演示】
public static void main(String[] args) {
int a=10;
int b=20;
a+=b; // a = a + b
System.out.println(a+":"+b);
}
7、字符串连接符
“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串 然后再进行连接。
public class Demo07 {
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); //10
//字符串连接符 + , String
System.out.println(a+b); //30
System.out.println(""+a+b); //输出1020,""是string类型 字符串在前面,后面的会拼接
System.out.println(a+b+""); //输出30,这个是面试题! 字符串在后面,运算依然执行
}
}
8、三目条件运算符
三目条件运算符,语法格式:
x ? y : z
其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整 个运算结果为表达式z的值。
//三元运算符
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
//如果x==ture, 则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格" : "及格"; //必须掌握
System.out.println(type); //输出及格
// if偷懒用法
}
}
9、运算符优先级
优先用小括号去组织!
本文是学习狂神老师的课程时做的笔记,部分内容参考了狂神老师的视频和随笔
狂神老师课程链接:https://www.kuangstudy.com/
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/280891.html