java运算符小结
类型转换
由于java是强类型语言,所以要进行有些运算的时候需要用到类型转换
低---------------------------------高
byte,short,char-> int -> long -> float ->double
小数的优先级大于整数
运算中不同类型的数据优先转换为同一类型然后进行运算
由高到低 强制转换
由低到高 自动转换
算术运算符
加+ 减- 乘* 除/
int a = 15;
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);//(a/b)输出为0,因为结果为0.75,a,b都是整形,自动向下取整。把其中一个转换为double
long x = 1231231231321L;
int y = 123;
short z =10;
byte n = 8;
System.out.println(x+y+z+n);//输出结果类型为long
System.out.println(y+z+n);//输出结果类型为int
System.out.println((double)z+n);//输出结果类型为double
//低向高,自动转换 有long类型肯定是long类型
++ 自增 --自减
int a = 3;
int b = a++;//执行完这行代码,先赋值,再自增
System.out.println(a);//a++ 先赋值再自增,输出a++还会是a的值
System.out.println(b);//这里的b输出的是3,因为a++是先赋值再自增
// a = a + 1
int c = ++a;
System.out.println(a);
System.out.println(c);//++a先自增在赋值,所以输出的是5
如代码 a++ 先赋值再自增,a的值为3,如果你直接打印(a++)结果依旧会输出为3。++a是先自增再赋值,所以你直接打印(++a)得到结果会是4. --同理。
关系运算符
大于>,小于<,不等于!=,等于==
int i = 10;
int l = 20;
int m = 21;
System.out.println(i>l);//false
System.out.println(i==l);//false
System.out.println(i<l);//true
System.out.println(i!=l);//true
关系运算符输出的结果为正确,错误,为布尔值
逻辑运算符
与&& 或|| 非!
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));
输出结果为:
a && b:false
a || b:true
!(a && b):true
短路运算
短路运算:即前面代码为假时,就会直接输出为假,不会执行后面的代码
int c =4;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
输出结果:
d为false
c:4
上述代码,因为c<4为假,直接会输出false,将不再会执行后面的c++代码,如果执行了c++,输出结果会为5.如下代码
int c =4;
boolean d = (c==4)&&(c++<4);
System.out.println(d);
System.out.println(c);
d输出为false
c:5
因为c==4为真,执行后面的c++<4为假,即输出为false,但是执行了c++这个代码,输出c时,值就会为5.
位运算符
与% 或| 非~ 异或^
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 两个同为1,为1。其余为0
A/B = 0011 1101 两个其中一个为1则为1,同为0 则为0
A^B = 0011 0001(异或)两个相同为0,不同为1
~B = 1111 0010 完全相反 0成了1,1成了0
<< >>
在计算机中如何计算28的速度最快,把28拆分为222*2,
即2<<3System.out.println(2<<3); //0010 左移3 0001 0000 为16
<< 相当于乘以2,>>相当于除以2
位运算的效率十分的高
条件运算符/三元运算符
? , :
x ? y : z
如果x==true,则结果为y,否则结果为z
int score = 50;
String type = score < 60 ? "不及格" : "及格"; //掌握
System.out.println(type);
输出结果:不及格
拓展运算符
+= , -=
int a = 10;
int b = 20;
a+=b; // a = a+b
a-=b; // a = a-b
字符串连接符 + ,string
System.out.println(""+a+b);//在前面为链接 输出1020
System.out.println(a+b+""+30);//在后面,先运算前面,再连接 输出3030