运算符
算术运算符(二元运算符)
-
内容: +加; -减; *乘; /除;%取余或模运算(取余数); ++自增; --自减;(自增自减在一元运算符中演示)
-
演示:
public class Demon01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a * b);//200
System.out.println(a + b);//30
System.out.println(a - b);//-10
System.out.println(a /(double)b);//0.5 还可以使用 System.out.println(a /(1.0*b)):原理,先将b转化为浮点数(double类型)
//因为a/b=0.5,为小数,非int类型,如果使用System.out.println(a /b);会因为精度问题而输出0.
int e =21;
System.out.println(e%a);//1
//e%a相当于 e/a=2.....1 取其余数1
3.注意: 运算中数据类型的转换
public class Demon02 {
public static void main(String[] args) {
byte a =8;
short b =10;
int c =123;
long d=123123123L;
System.out.println(a+b+c+d);//123123264,long类型
System.out.println(a+b+c);//141 int类型
System.out.println(a+b);//18 int类型
//运算没有long时,运算后所有非int类型转化为int类型,有long时转化为long类型,有double类型同理,添加类型转换命令除外
关系运算符
-
**内容:**大于>;小于<;大于等于>=;小于等于<=;等于==;不等于!=
-
注意: 关系运算符返回的结果是 true或false(布尔值)
-
演示:
public class Demon03 {
public static void main(String[] args) {
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
}
}
一元运算符(自增++;自减- -)
- 注意: 自增自减的单位为1
- 演示:
public class Demon04 {
public static void main(String[] args) {
int a =3;
int b =a++;
//执行完这行代码后,先给b赋值a,a再自增,即执行后,先b=a=3,再a=a+1=4
System.out.println(b);//3(赋值)
System.out.println(a);//4(自增)
int c =++a;
//执行完这行代码前,a先自增,再赋值给c,即执行完之前,先a=a+1=4+1=5,再c=a=5
System.out.println(a);//5(自增)
System.out.println(c);//5(赋值)
}
}
3.记: 哪个距离近,先执行哪个
逻辑运算符
- 内容: && 与(且,and);
|| 或(or);
! 非(取反): - 演示:
public class Demon05 {
public static void main(String[] args) {
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)); //逻辑非运算,是非相反
/*System.out.println((a&&b))可直接输出真与假;,即如果将“ ”及其内容去掉,只输出结果,其中的 + 起到连接作用*/
}
}
- 短路运算
public class Demon05 {
public static void main(String[] args) {
//短路运算:在逻辑与运算中,有一假则输出false,如果多个变量并列,第一个为假,则会直接输出false而不再运算其后的变量
int c =5;
boolean d =(c<4)&&(c++<10);
System.out.println(d);//false
System.out.println(c);//5 此处输出的是未进行c++运算的c值,
/*此处由于c=5<4明显为假且在前,在逻辑与运算中,则不再继续向后运算,即短路了,直接输出false,其后的c++不再进行运算*/
}
}
位运算(二进制)
-
内容:
&与(且);
|或;
^;
~非(取反);
<<左移(*2);
>>右移(/2): -
演示:
public class Demon06 {
public static void main(String[] args) {
/*
A=0011 1100
B=0000 1101
A&B=0000 1100(对应项,AB都为1,则A&B为1,否则为0) 一0则0 其余为1
A|B=0011 1101(对应项,AB都为0,则A|B为0,否则为1) 一1则1 其余为0
A^B=0011 0001(对应项,相同为0,不相同为1) 相同为0 其余为1 (异或运算:不进位加法)
~B=1111 0010(与B完全相反) 完全相反
2*8=16=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,在二进制中,2左移三位,即2*2*2*2,左移即*2,同理,十进制中,左移*10
System.out.println(3<<3);//3*2*2*2=24
//位运算因为直接使用二进制,效率极高
}
}
扩展赋值运算符:
- 内容:
-=;
*=;
+=;
/=;
2.演示:
public class Demon07 {
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);//a+b-b=10
}
}
字符串连接符(+)
public class Demon07 {
public static void main(String[] args) {
System.out.println(a+b);//30
System.out.println("1"+(a+b));//130,先运算a+b,再输出字符串1ab,即130
System.out.println("1"+a+b);//11020,输出字符串1ab,即11020
//String为字符串,通常用法为 String 变量名="值",所以""可以代表Str类型
// + 为字符串连接符:当 + 前面出现字符串类型的数据,则所有数据都会被转化成字符串类型的数据而后输出
/*注意区分*/
System.out.println(""+a+b);//1020,字符串类型在+前,后面a+b中 + 成为字符串连接符,
System.out.println(a+b+"");//30,字符串类型在+后,前面a+b正常运算后输出
}
}
条件运算符(三元运算符)
- 格式: 条件 ? 结果A : 结果B;
- 演示:
public class Demon08 {
public static void main(String[] args) {
/* x ? y :z */
//如果x==true,则结果为y,否则则结果为z
int Score=80;
String type = Score <60 ?"不及格":"及格";
// 数据类型 变量名 = 值
System.out.println(type);//及格
}
}