Java 支持如下运算符:
算术运算符: +,-,*,/,%,++,--
赋值运算符 = 关系运算符: >,<,>=,<=,==,!= instanceof
*逻辑运算符: &&,||,!
*位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
*条件运算符 ?:
扩展赋值运算符:+=,-=,=,/=
有两个操作数的叫二元运算符
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 } }
取模就是以前学的取余 如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 }
自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算, 而自增自减运算符是一个操作数,分为前缀和后缀两种。
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 } }
public static void main(String[] args) { int a = 3^2; //java中不能这么处理, ^是异或符号。 double b = Math.pow(3, 2); }
Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法!
逻辑与:&&和&
逻辑或:||和|
逻辑非:!
【演示】
//逻辑运算符 (与 或 非) 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;
位运算符作用在所有的位上,并且按位运算。
//位运算(计组学过) 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就是十六 */ } }
【演示】
public static void main(String[] args) { int a=10; int b=20; a+=b; // a = a + b System.out.println(a+":"+b); }
“+” 运算符两侧的操作数中只要有一个是字符串(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,这个是面试题! 字符串在后面,运算依然执行 } }
三目条件运算符,语法格式:
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偷懒用法 } }
优先用小括号去组织!
本文是学习狂神老师的课程时做的笔记,部分内容参考了狂神老师的视频和随笔
狂神老师课程链接:https://www.kuangstudy.com/