【学习日记(运算符)】Day.9
运算符
Java 语言支持如下运算符: 优先级 ()
-
算术运算符:+,-,*,/,%(模),++,--
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==(Java里的等于是两个==),!=,instanceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,……,~,>>,<<,>>>(了解!!!)
-
条件运算符: ?:
-
扩展赋值运算符:+=,-=,*=,/=
//二元运算符
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b);
long a = 12123132121231321L;
int b = 123;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d);//Long 运算中如有一个数值为Long,那么运算结果也为Long,如果没有Long,便为int。
System.out.println(b+c+d);//Int cast:转换 如有一个数值位Double,则结果也为Double
System.out.println(c+d);//Int
//关系运算符返回的结果: 正确,错误 布尔值
//if
int a = 10;
int b = 20;
int c = 21;
//取余 也叫模运算
System.out.println(c%a); // c/a 21/10 = 2 ... 1
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
自增自减符
一元运算符
-
“++” 自增
-
“--”自减
//++ -- 自增,自减 一元运算符
int a = 3;
int b = a++; //执行完这行代码后,先给b赋值,再自增
//a a = a + 1;
System.out.println(a); //4
//a a = a + 1;
int c = ++a; //执行完这行代码后,先自增,再给c赋值
System.out.println(b);//3
System.out.println(b);
System.out.println(c);//5
System.out.println(c);
幂运算
//幂计算 2^3 2*2*2 = 8 很多运算我们会使用一些工具类来操作!
double pow = Math.pow(2,3);
System.out.println(pow);
逻辑运算符
与 (and) 或 (or) 非 (取反)
-
"a && b" 逻辑与运算:两个变量都为真,结果才为true
-
"a||b" 逻辑与运算:两个变量有一个为真,结果才为true(两个变量都为假才为false)
-
"!(a&&b)" 如果是真,则变为假,如果是假,则变为真。
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b)); //逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b:"+(a||b)); //逻辑与运算:两个变量有一个为真,结果才为true(两个都为假,结果才为false)
System.out.println("! (a && b)"+!(a&&b));//如果是真,则变为假,如果是假则变为真
短路运算
如果“a&&b”中 前者“a”已经为false,则不进行“b”的运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5
int h = 10;
boolean y = !((h>20)&&(h++>20));
System.out.println(y);//true
System.out.println(h);//10
位运算
/*
A = 0011 1100
B = 0000 1101
------------------
A&B = 0000 1100 同为1才能得1,其余为0
A|B = 0011 1101 同为0才为0,如果有1则为1
A^B = 0011 0001 如相同位置数字相同为0,不同为1
~B = 1111 0010 与原数字完全相反
2*8 = 16 2*2*2*2
效率极高!!!
<<左移 *2
>>右移 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3); //16
扩展赋值运算
例: a+=b; //a = a+b
a-=b; //a = a-b
字符串连接符 "+"
String(字符串)
System.out.println(""+a+b); //如果字符串在前面 ,转换成字符串进行链接 输出1020
System.out.println(a+b+"");//如果字符串在后面 ,依旧进行运算 输出30
三元运算符
x ? y : z
如果x==true,则结果为y,否则结果为z
例:
int score = 80;
String type = score <60 ?"不及格":"及格"; //必须掌握
// if(以后会学)
System.out.println(type);
运算符的优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、-- | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
源代码就是一份文档,源代码的可读性比代码运行效率更重要。 因此在这里要提醒大家:
-
不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
-
不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用
()
来控制表达式的执行顺序。
此部分来源于