操作符
操作符
操作符 | 作用 | 例子 |
---|---|---|
= | 最基础的赋值操作符,=号右边的值,赋给=号左边变量 | int a = 1; int x = 0; |
*= | 一个变量和另一个数据相乘,并把结果再赋值给这个变量 | int a = 1; a*=2; //a = a*2; |
/= | 一个变量和另一个数据相除,并把结果再赋值给这个变量 | int a = 2; a/=2; //a = a/2; |
%= | 一个变量和另一个数据相余,并把结果再赋值给这个变量 | int a = 5; a%=2; //a = a%2; |
+= | 一个变量和另一个数据相加,并把结果再赋值给这个变量 | int a = 5; a+=2; //a = a+2; |
-= | 一个变量和另一个数据相减,并把结果再赋值给这个变量 | int a = 5; a-=2; //a = a-2; |
> | 比较是否大于 | 1>0 |
>= | 比较是否大于等于 | 1>=0 |
< | 比较是否小于 | 1<2 |
<= | 比较是否小于等于 | 1<=2 |
instanceof | 判断对象是否属于指定类型 | stu instanceof Student |
- == 和 !=
public class Demo {
public static void main(String[] args) {
System.out.println(1==2);
System.out.println(1!=2);
//比较两个变量指向的地址
Hello hello = new Hello();
Hello hello2 = new Hello();
System.out.println(hello==hello2);
System.out.println(hello!=hello2);
System.out.println(hello);
System.out.println(hello2);
//基本类型只比较值,不管类型
System.out.println(1==1.0);//true
System.out.println(97=='a');//true
}
}
class Hello{
}
- */+ -
public class Demo2 {
public static void main(String[] args) {
int a =10;
int b =4;
System.out.println(a+b);//14
System.out.println(a-b);//6
System.out.println(a*b);//40
System.out.println(a/b);//2
System.out.println(a%b);//2
//特殊 + 可以做拼接 比如和字符串使用
//字符串 + 任何内容 组成新的字符串
String s = "hello";
System.out.println(s+new Demo2());
System.out.println(s+a);//hello10
System.out.println(s+"我的值是"+a+"!");
System.out.println(s+5+5);//hello55
//注意%对负数求余,最终结果取决于第一个数的符号
System.out.println(10%-4);//2
System.out.println(-10%4);//-2
}
}
- />> << >>> <<<
public class Demo3 {
public static void main(String[] args) {
//8
// 24个0 00001000 正数 原码 反码 补码 都一样
//00000000 00000000 00000000 00001000
//右移1 00000000 00000000 00000000 00000100 丢弃最后一个0
//有符号 正数补0 负数补1
System.out.println(8>>1);//4
//00000000 00000000 00000000 00001000
//左移1 0 00000000 00000000 00000000 00010000 丢弃最前一个0
System.out.println(8<<1);//16
//-8
//10000000 00000000 00000000 00001000 原码
//11111111 11111111 11111111 11110111 反码
//11111111 11111111 11111111 11111000 补码
//11111111 11111111 11111111 11111001 0左移
//11111111 11111111 11111111 11111000
//10000000 00000000 00000000 00000100
System.out.println(-8>>1);//-4
//10000000 00000000 00000000 00001000 原码
//11111111 11111111 11111111 11110111 反码
//11111111 11111111 11111111 11111000 补码
//1 11111111 11111111 11111111 11110000 右移
//11111111 11111111 11111111 11101111
//10000000 00000000 00000000 00010000
System.out.println(-8<<1);//-16
}
}
System.out.println(5&9);
//5 00000000 00000000 00000000 00000101
//9 00000000 00000000 00000000 00001001
//5&9 00000000 00000000 00000000 00000001
//结果为:1
System.out.println(5|9);
//5 00000000 00000000 00000000 00000101
//9 00000000 00000000 00000000 00001001
//5&9 00000000 00000000 00000000 00001101
//结果为:13
System.out.println(5^9);
//5 00000000 00000000 00000000 00000101
//9 00000000 00000000 00000000 00001001
//5&9 00000000 00000000 00000000 00001100
//结果为:12
System.out.println(~-5);
//5 10000000 00000000 00000000 00000101
//5 11111111 11111111 11111111 11111010 反码
//5 11111111 11111111 11111111 11111011 补码
//~ 00000000 00000000 00000000 00000100
//结果:4
System.out.println(5<<2);
//5 00000000 00000000 00000000 00000101
//5 00000000 00000000 00000000 00010100
//结果:20
System.out.println(-5<<2);
//-5 10000000 0000000 0000000 00000101
//-5 11111111 1111111 1111111 11111010 反码
//-5 11111111 1111111 1111111 11111011 补码
//-5 11111111 1111111 1111111 11101100 左移
// 11111111 1111111 1111111 11101011 反码
// 10000000 0000000 0000000 00010100
//结果:-20
System.out.println(-5>>2);
//-5 10000000 0000000 0000000 00000101
//-5 11111111 1111111 1111111 11111010 反码
//-5 11111111 1111111 1111111 11111011 补码
//-5 11111111 1111111 1111111 11111110 右移
// 11111111 1111111 1111111 11111101 反码
// 10000000 0000000 0000000 00000010
//结果:-2
System.out.println(-5>>>2);
//-5 10000000 0000000 0000000 00000101
//-5 11111111 1111111 1111111 11111010 反码
//-5 11111111 1111111 1111111 11111011 补码
//-5 00111111 1111111 1111111 11111110 >>>
//结果:2^30-2
System.out.println(5>>2);
//5 00000000 0000000 0000000 00000101
//5 00000000 0000000 0000000 00000001
//结果:1
System.out.println(5>>34);
//5>>34=5>>2
//结果:1
System.out.println(97=='a');
//==号不考虑数据类型,返回值为true
System.out.println(5.0==5);
//==号不考虑数据类型,返回值为true
System.out.println(4>5 ^ 'c'>'a');
//相当于flse^true,返回值仍然true
- &^~|
public class Demo4 {
public static void main(String[] args) {
//1
//00000000 00000000 00000000 00000001
//0
//00000000 00000000 00000000 00000000
System.out.println(1&0);//0
//同时为一才为1
//1&1
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000001
System.out.println(1&1);//1
//1&3
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000001 结果
System.out.println(1&3);
//1|3
//有1取1 无则取0
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000011 结果
System.out.println(1|3);//3
//1^3
//相同取0 不同取1
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00000010 结果
System.out.println(1^3);//2
//~:取反 1->0,0->1
//00000000 00000000 00000000 00000001
//11111111 11111111 11111111 11111110 补码
//11111111 11111111 11111111 11111101 反码
//10000000 00000000 00000000 00000010 原码
System.out.println(~1);
}
}
使用场景 交换数值
public class Demo5 {
public static void main(String[] args) {
int a =10;
int b =5;
//方法1 借助中间变量
int temp;
temp=a;
a=b;
b=temp;
System.out.println(a);
System.out.println(b);
//方法2:不能使用中间变量
a = a+b;
b = a-b;
a = a-b;
System.out.println(a);
System.out.println(b);
//方法三:使用^异或交换
a =a^b;
b =a^b;
a =a^b;
System.out.println(a);
System.out.println(b);
}
}
- && ||
public class Demo6 {
public static void main(String[] args) {
//&&连接两个布尔表达式,拼接多个判断条件
//同时为true才为true
int a=1;
int b=5;
System.out.println(a>0&&b>0);//true
System.out.println(a>1&&b>1);//false
// || 拼接多个判断条件 一个为true就为true
System.out.println(a>5||b>5);//false
System.out.println(a>1||b>1);//true
//&&的短路效果,前面为false后面表达式不计算
//a=1,b=5
System.out.println(a++>1&&++b>0);
System.out.println(a);
System.out.println(b);//此时b不会自增
System.out.println(a++>0&&++b>0);
System.out.println(a);
System.out.println(b);//此时b会自增
//||的短路效果,前面为true后面不执行
System.out.println(a++>0||++b>0);
System.out.println(a);
System.out.println(b);//此时b不会自增
}
}
计算机会把true识别为1 false为0
- 三目运算符
public class Demo7 {
public static void main(String[] args) {
int num =0;
char gender;
if (num==0){
gender = '男';
}else {
gender = '女';
}
System.out.println(gender);//男
// System.out.println((num==0)?(gender='男)':(gender='女'));
char gender2 = num==1?'男':'女';
System.out.println(gender2);//女
}
}
优先级 | 运算符 | 结合性 |
---|---|---|
1 |