运算符
算数运算符
package day2;
/*
* 算数运算符
* + 正数 加法 字符串连接
* - 负数 减法
* *乘法
* /除法
* % 取余
* ++自加
* --自减
* */
public class OperDemo {
public static void main(String[] args) {
// +
int a=5;
int b=10;
char c='a';
String d="20";
System.out.println(a+b);//数值+数值
System.out.println(c+b);//字符+数值=数值
System.out.println(b+d);//+字符串连接 数值+字符串=字符串
// - 负数 减法 数值与数值(char)
int s=-9;
System.out.println(a+s);
// * / % 数值与数值(char)
System.out.println(b%a);//取余数 判断俩个数是否整除
// ++ --
/* int x=7;
x++;//x=x+1 8
++x;//x=x+1 9
--x;//x=x-1 8
x--;//x=x-1 7
System.out.println(x);*/
int x=5;
int y=x++ + 1;//注意:++在混合运算中 ++在先运算后自增
System.out.println(x);
System.out.println(y);
int i1=10;
int i=i1--;
System.out.println("i="+i);
System.out.println("i1="+i1);
System.out.println(a++);
System.out.println(a);
System.out.println(x++);
}
}
比较运算符
package day2;
/*
比较运算符
==, !=, 基本类型数值之间的比较,引用类型与引用类型比较
>, <, >=, <= 数值与数值(char)
*/
public class OperDemo2 {
public static void main(String[] args) {
int a=5;
int b=10;
System.out.println(a==b);//基本类型数值之间的比较
System.out.println(a!=b);
String s="sww";
String s1="sss";
System.out.println(s==s1);//引用类型与引用类型比较
System.out.println(a>b);
System.out.println(a<b);
}
}
逻辑运算符
package day2;
/*
逻辑运算符
&—逻辑与 | —逻辑或 ^ —逻辑异或
& | ^左右操作数为逻辑值(true/false) 否则是位运算
&& —短路与 || —短路或 !—逻辑非
*/
public class OperDemo3 {
public static void main(String[] args) {
int a=6,b=5,c=12;
/* System.out.println(a>b & b>c);//true & flase=flase
System.out.println(a<b & b>c);//flase & flase=flase
System.out.println(a>b & b<c);//true & true=true
System.out.println(a<b & b<c);//flase & true=flase
System.out.println(a>b && b>c);//true & flase=flase
System.out.println(a<b && b>c);//flase & flase=flase
System.out.println(a>b && b<c);//true & true=flase
System.out.println(a<b && b<c);//flase & true=flase
*/
System.out.println(a>b & b>c);//true & flase=flase
System.out.println(a>b & b<c);//true & true=true
System.out.println(a<b && b++>c);//true && flase=flase
System.out.println(b);
System.out.println(a>b && b++<c);//flase && true=flase
System.out.println(b);
// | 遇到第一个true后,后面的表达式还会执行
// || 遇到第一个true后,就会短路后面的表达式不会执行
}
}
赋值运算,条件运算符
早期面试题
short s = 3;
s=s+2; //1
s += 2; //隐式转换 s=s+2 //2
System.out.println(s);
package day2;
/*
赋值运算
=
注意 = 两边类型与值相匹配
int a = 10;
基本数据类型转换:默认转换,强制类型转换
long b = a;
byte c = (byte)b;
+= -= *= /= %
*/
public class OperDemo4 {
public static void main(String[] args) {
//条件运算符
int a = 10;
int b = 5;
int c = (a>b)?a:b; //需要返回一个结果
System.out.println(c);
}
}
位运算符
package day2;
/*
位运算
是二进制位(bit位) 上的运算, 执行效率高
<< 左移 左移1位相当于*2
>> 右移
>>> 无符号右移 不需要关心高位上的符号 (如果影响到了符号位,只需要在符号位补0)
&
|
^
~
*/
public class OperDemo5 {
public static void main(String[] args) {
int a = 2;
System.out.println(a<<2);
System.out.println(Math.pow(2,3));
int b = 8;
System.out.println(b>>1);
/*
0011
0100 都为1结果为1
0000
*/
System.out.println(3&4);
/*
0011
0100
0111 ==7
*/
System.out.println(3|4);
/*
0011
0100
0111 =7
*/
System.out.println(3^4);
//逻辑非 取反
System.out.println(~3);
}
}
表达式的运算顺序
0100
0111 =7
*/
System.out.println(3^4);
//逻辑非 取反
System.out.println(~3);
}
}
### 表达式的运算顺序