Java基础语法3:运算符
算术运算符:
- 符号: + , – , * , / , % , ++ , —
- 相同类型的运算正常输入即可
- 运算结果为其他类型,要先转换其中一个值
- 下面进行一些简单操作:
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
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/(double)b);//结果为0.5,先给一个数进行转换
}
}
- 多个不同类型之间运算,最后结果类型一定为高类型
- 例如上面的运算中有double,最后结果一定是double类型
- 基础类型的高低排序在我Java基础语法2中有提到
- 下面进行一些简单操作:
package operator;
public class Demo02 {
public static void main(String[] args) {
//多个不同类型之间运算,最后结果类型一定为高类型
//例如上面的运算中有double,最后结果一定是double类型
//基础类型的高低排序在我Java2基础语法中有排序
long a = 132456L;
int b=15;
short c=10;
byte d=8;
float e=16f;
double f=158;
System.out.println(a+b+c+d+e+f);//结果为double类型
System.out.println(a+b+c+d+e);//结果为double类型
System.out.println(a+b+c+d);//结果为long类型
System.out.println(a+b+c);//结果为long类型
System.out.println(a+b);//结果为long类型
System.out.println(b+c+d);//结果为int类型
System.out.println(c+d);//结果为int类型
}
}
- 最后提到算数运算符中的一元运算符:++ 自增 — 自减
- ++在前(先自增再赋值)++在后(先赋值再自增)
- 下面进行一些简单操作:
package operator;
public class Demo04 {
public static void main(String[] args) {
// ++ -- 自增 自减 一元运算符
int a = 3;
int b = a++;//执行完这行代码后(先给b赋值,再自增)
//a=a+1;隐藏代码,自动运行,无需操作
System.out.println(a);//结果为4
//a=a+1;隐藏代码,自动运行,无需操作
int c = ++a;//执行完这行代码前(先自增,再给b赋值)
System.out.println(a);//结果为5
System.out.println(b);//结果为3
System.out.println(b);//结果为3
System.out.println(c);//结果为5
System.out.println(c);//结果为5
//幂运算 java中不能这样输入 2^3 2*2*2 = 8
//很多运算,我们会使用一些工具类来操作
double pow = Math.pow(2, 3);//2的3次方
System.out.println(pow);//结果为8
}
}
赋值运算符:
- 符号: =
- 不做过多说明
关系运算符:
- 符号: > , < , >= , <= , == , !=instanceof
- 关系运算符的结果为:正确或者错误 为布尔值
- 下面进行一些简单操作:
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 结果为布尔值
int a = 15;
int b = 25;
int c = 16;
int d = 24;
int e = 50;
System.out.println(e%a);// 结果为5 %为余值,读模 50/15=3...5
System.out.println(a>b);//结果为false
System.out.println(c<d);//结果为true
System.out.println(b>=d);//结果为true
System.out.println(a<=c);//结果为true
System.out.println(a!=b);//结果为true
}
}
逻辑运算符:
-
符号: && ,|| ,!
-
与(and) , 或(or) , 非(取反)
-
逻辑与运算:两个变量都为真,结果才为真
- 逻辑与运算如果前面的运算为假,则不进行后面的运算,称之短路运算
-
逻辑或运算:两个变量有一个为真,结果为真
-
逻辑非运算:如果是真则变为假,如果是假则变为真
- 下面进行一些简单操作
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
// && || !
// 与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,则结果为真
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个为真,结果为真
System.out.println("!a&&b:"+!(a&&b));//如果是真则变为假,如果是假则变为真
//短路运算
int i = 6;
boolean d = (i<5)&&(i++<10);
System.out.println(i);//结果为6,不进行后面的运算
System.out.println(d);//结果为false
//逻辑与运算中前面的结果为假,则不进行后面的运算,称之短路运算
boolean e = (i<5)||(i++<10);
System.out.println(i);//结果为7,两个运算都进行
System.out.println(e);//结果为ture
//逻辑或运算两个运算都进行,并且有一个为真即为真
}
}
位运算符:
-
符号: & ,| ,^ , ~ , >> , << , >>>(了解!!!)
-
涉及到二进制的运算:单个运算
-
&与运算 : 00为0,01为0,11为1
-
|或运算 : 00为0,01为1,11为1
-
^亦或运算:不同为0,相同为1
-
~非运算:完全相反
-
右移>> : 右移一次/2
-
左移<< : 左移一次*2
- 下面进行一些简单操作:
package operator;
//位运算
public class Demo06 {
public static void main(String[] args) {
/*
A = 0010 0110
B = 1001 1010
-------------------
A&B = 0000 0010
A|B = 1011 1110
A^B = 1011 1100
~B = 0110 0101
面试题:
2*8怎么运算最快 :可以拆分成2*2*2*2
位运算效率极高
二进制编码中:
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
以此类推
0001 0000 16
得出结论
<< 左移一位*2
>> 右移一位/2
*/
System.out.println(2<<3);//2右移三位,即2*2*2*2=16
}
}
条件运算符:
-
符号: ? :
-
条件运算符为三元运算符
-
举例:x ? y : z 意思如果x为真,则结果为y,否则结果为z;
- 下面进行一些简单操作:
package operator;
//三元运算符
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
//如果x==true,则结果为y, 否则结果为z
int score1 = 60;
String type1 = score1 < 60?"不合格":"合格";
//如果分数小于60分为不合格,否则为合格
int score2 = 95;
String type2 = score2 > 90?"优秀":"良好";
//如果分数大于90分为优秀,否则为良好
System.out.println(type1);//结果为合格
System.out.println(type2);//结果为优秀
//------------------------------------------
int salary = 2500;
String choose = salary<5000?"进厂打螺丝":"选择这份工作";
//如果工资小于5000则进场打螺丝,否则选择这份工作
System.out.println(choose);//哦豁,进厂打螺丝
}
}
扩展赋值运算符:
-
符号: += , -= , *= , /=
-
简单地说就是偷懒的运算
-
例如:a+=b即为a=a+b
-
拓展:+号算法 字符串连接 String
- 只要+号运算符两侧出现字符串String类型
- 则会把其他操作都转换成Sting类型再进行连接
- 字符串在前面,则进行字符串连接
- 字符串在后面,前面依旧进行运算,再进行字符串连接
- 下面进行一些简单操作:
package operator;
//拓展赋值运算符
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;//a=a+b
a-=b;//b=a-b
System.out.println(a);
//第一个结果30
//第二个结果-10
//拓展:字符串连接符 +
System.out.println(a+b);//结果30
//只要+号运算符两侧出现字符串String类型
//他会把其他操作都转换成String再进行连接
//面试题,下面两个
System.out.println(""+a+b);//为1020
//字符串在前面,则直接进行字符串连接
System.out.println(a+b+"");//为30
//字符串在后面,前面依旧进行运算,再进行字符串连接
}
}
Java语言运算符的优先级:
- 最优先级: ( )
- 完全靠死记硬背是很累的,要靠读者多练习。
- 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
- 不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用 ( ) 来控制表达式的执行顺序。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/275299.html