5.运算符(优先级)
-
**一元运算符 》 ±*/ 》位运算 》关系运算符 》逻辑运算符 》?: (最好使用() 自定义优先级) **
-
算数运算符:+,-,*,/,%,++,–
-
**% : 取模运算,运算结果正负取决于被取模数(%左边的数)的符号 **
-
操作数里有double结果自动转为double,
-
操作数里有float无double结果自动转为float,
-
操作数里有long无float、double结果自动转为long,
-
操作数里有无long、float、double,操作数类型不同(char、byte、short)运算结果自动转为int(不管有无int类型)
-
public class Demo01 { public static void main(String[] args) { byte b = 100; short s = 40; int i = 20; char ch = 'a';//对应数值97 //==================================value1类型,value2类型 结果 结果类型 System.out.println(b + b);//byte,byte 200 int System.out.println(b + s);//byte,short 140 int System.out.println(ch + ch);//char,char 194 int System.out.println(ch + s);//char,short 137 int System.out.println(ch + b);//char,byte 197 int System.out.println(b * i);//byte,int 2000 int int i2 = 40; long l = 100; float f = 33f; double d = 33; //==================================value1类型,value2类型 结果 结果类型 System.out.println(i / i2);//int,int 0 int System.out.println(i / (double)i2);//int,double 0.5 double 运算结果为小数时注意数据类型范围 System.out.println(i * l);//int,long 2000 long System.out.println(l / f);//long,float 3.030303 float System.out.println(l / d);//long,double 3.0303030303030303 double System.out.println(f / d);//float,double 1.0 double } }
-
-
赋值运算符:=
-
a = 10;//把10赋值给a
-
-
关系运算符:>,<,>=,<=,==,!=,instanceof(结果为布尔值)
-
逻辑运算符:
-
&&(短路与,两个真才为真 左边false右边不进行运算),
-
||(短路或,有一个为真则为真 左边ture右边不进行运算),
-
!(非)
-
&(与,两个真才为真 无论左边true或false右边都进行运算),
-
|(或,有一个为真则为真 无论左边true或false右边都进行运算),
-
^(异或 左右不同为true),
public class Demo03 { public static void main(String[] args) { int a = 1; int b = 1; // && 左边false右边不进行运算 System.out.println("++++++++++++++++++++++++++++++++++a1"); System.out.println((a>3)&&(a>a++)); System.out.println(a);//1 左边false右边不进行运算 System.out.println("++++++++++++++++++++++++++++++++++a2"); System.out.println((a<3)&&(a>a++)); System.out.println(a);//2 左边true右边进行运算 // & 无论左边true或false右边都进行运算 System.out.println("++++++++++++++++++++++++++++++++++a3"); System.out.println((a<3)&(a>a++)); System.out.println(a);//3 左边false右边进行运算 System.out.println("++++++++++++++++++++++++++++++++++a4"); System.out.println((a>2)&(a>a++)); System.out.println(a);//4 左边ture右边进行运算 // || 左边ture右边不进行运算 System.out.println("++++++++++++++++++++++++++++++++++b1"); System.out.println((b<3)||(b>b++)); System.out.println(b);//1 左边ture右边不进行运算 System.out.println("++++++++++++++++++++++++++++++++++b2"); System.out.println((b>3)||(b>b++)); System.out.println(b);//2 左边false右边进行运算 // | 无论左边true或false右边都进行运算 System.out.println("++++++++++++++++++++++++++++++++++b3"); System.out.println((b<3)|(b>b++)); System.out.println(b);//3 左边true右边进行运算 System.out.println("++++++++++++++++++++++++++++++++++b4"); System.out.println((b>3)|(b>b++)); System.out.println(b);//4 左边false右边进行运算 } }
-
-
位运算符:
-
&(按位与 两个是1才为1 0&0 0;0&1 0;1&1 1;1&0 0),
-
|(按位或 有1就为1),
-
^(按位异或 相同为0,不同为1 0^0 0;0^1 1;1^1 0;1^0 1),
-
~(取反 ~0 1;~1 0),
-
>>(二进制右移 原来是谁就补谁),
-
<<(二进制左移 补零)求2的四次方 左移三位效率最高
-
>>>(二进制无符号右移 补零)(了解)
System.out.println(2<<3);//0000 0010左移三位0001 0000 16 System.out.println(16>>3);//0001 0000右移三位0000 0010 2 System.out.println(0b1<<4);//0000 0001左移四位0001 0000 16 System.out.println(07<<1);//000 111左移一位001 110 14 System.out.println(01<<1);//001左移一位010 2 System.out.println(0x10<<1);//0001 0000左移1位0010 0000 32
-
-
条件运算符(三元运算符或三目运算符):?:
-
x ? y :z
- 如果x==true,则结果为y,否则结果为z
-
//boobean_expr ? true_statement : false_statement; int a = 4; System.out.println(a<=0 ? "a小于0" : "a大于零为:" + a);//a大于零为:4
-
-
拓展运算符:+=(加等于),-+(减等于),*=(乘等于),/=(除等于)
- 字符串连接符 + ,String 字符串出现在前面拼接,字符串出现在后面前面先运算之后再拼接
public class Demo04 { public static void main(String[] args) { int a = 10; int b = 20; a += b;//a = a+b 30 System.out.println(a); a -= b;//a = a-b 10 System.out.println(a); a *= b;//a = a*b 200 System.out.println(a); a /= b;//a = a/b 10 System.out.println(a); //字符串连接符 + ,String 字符串出现在前面拼接,字符串出现在后面前面先运算之后再拼接 System.out.println("" + a+b);//1020 自动转为String类型 字符串出现在前面拼接 System.out.println(a+b + "");//30 字符串出现在后面前面运算之后拼接 } }
-
**++、–**放在变量之前和之后的区别
-
放在b之前:先自加减,后赋值;
-
放在b之后:先赋值,后自加减
-
//++、--放在变量之前和之后的区别 int b = 3; int c = ++b;//放在b之前:先自加 b = b+1,后赋值 System.out.println("b="+ b + ";" + "c=" + c);//b=4;c=4 int d = b++;//放在b之后:先赋值,后自加 b = b+1 System.out.println("b="+ b + ";" + "d=" + d);//b=5;d=4 //幂运算 2^3(java中不能这样) 2*2*2=8 数学运算使用Math工具类中方法进行运算 double pow = Math.pow(3,2);//3的2次方 double pow2 = Math.pow(2,3);//2的3次方 System.out.println(pow);//9 System.out.println(pow2);//8
-