java中的操作符(operator)
1)赋值操作符:
= 例如: int x=0,i=1,j=1;
= 例如: a=b 等价于 a=a*b
/= 例如: a/=b 等价于 a=a/b;
%= 例如: a%=b 等价于 a=a%b;
+= 例如: a+=b 等价于 a=a+b;
-= 例如: a-=b 等价于 a=a-b;
其他的都是类似情况
a+=1; a++
特殊情况:i++ 和 ++i
i++表示先使用i的值,然后再让i自增1。
++i表示先让i的值自增1,然后再使用i的值。
例如:
int a = 1;
System.out.println(a++);//1
System.out.println(a);//2
---------------------------------
int b = 1;
System.out.println(++b);//2
System.out.println(b);//2
类似的i-- 和 --i也是一样的区别
2)比较操作符
> : 大于
>= : 大于等于
< : 小于
<= : 小于等于
注意:以上操作符只适用于整数类型和浮点数类型;
int a=1,b=1;
double d=1.0;
System.out.println(a>b);//false
System.out.println(a<b);//false
System.out.println(a>=d);//true
System.out.println(a<=b);//true
instanceof: 判断一个引用类型变量所指向的对象是不是属于某个类型。
Student s = new Student();
System.out.println(s instanceof Object);//true
System.out.println(s instanceof Student);//true
//编译报错,因为Student类型和String没有任何子父类关系
System.out.println(s instanceof String);
注意:最终判断的是s所指向对象的类型是不是属于某类型,而不是判断变量s的类型是不是属于某个类型.
例如:
Object o = new Student();
变量o的类型是Object,但是o指向的对象类是Studnet.可以这样写的原因是因为Object是Studnet的父类.这是java的高级特性"多态"的一种表现方式。
3)相等操作符
== : 判断俩个数据 是否 等于
!= : 判断俩个数据 是否 不等于
既可以应用在基本类型的比较,也可以应用在引用类型的比较
a.基本类型:
int a=1,b=1;
float c=1.0f;
double d=1.0;
//比较的是俩个基本类型数据的值是否相等
System.out.println(a==b); //输出true;
System.out.println(a==c); //输出true;
System.out.println(a==d); //输出true;
System.out.println(c==d); //输出true;
b.引用类型:
这两个引用变量必须都引用同一个对象,结果才为true.
Student s1 = new Student("zs",25,100);
Student s2 = new Student("zs",25,100);
//s1中存储的对象内存地址赋给变量s3
Student s3 = s1;
//比较俩个引用所指向对象的堆区内存地址是否一样
//俩个对象的内存地址一样相比较才会是true
System.out.println(s1 == s2); //输出false;
System.out.println(s1 == s3); //输出true;
4)相加操作符
+ : 数据类型值相加或字符串连接
a.数据类型值相加
int a=1+2; //a值为3;
double b=1+2; //b值为3.0;
double b=1+2.0; //c值为3.0;
b.字符串连接
System.out.println(1+2+"a"); //输出3a
System.out.println(1+2.0+"a");//输出3.0a
System.out.println(1+2.0+"a"+true);//输出3.0atrue
System.out.println("a"+1+2); //输出a12
System.out.println(1+"a"+2); //输出1a2
/ : 整除, 如操作数均为整数,运算结果为商的整数部分
int a1=12/5; //2
int a2=13/5; //2
int a3=-12/5; //-2
int a4=-13/5; //-2
int a5=1/5; //0
double a6=12/5; //2.0
double a7=12/5.0; //2.4
% : 取模操作符, 如操作数均为整数,运算结果为商的整数部分
int a1=1%5; //1
int a2=13%5; //3
double a3=1%5; //1.0
double a4=12%5.1; //1.8000000000000007
5)移位运算符:二进制的运算
int a = -12;
内存中保存的
原码
00000000 00000000 00000000 00001100
取反
11111111 11111111 11111111 11110011
+1
11111111 11111111 11111111 11110100
右移两位 >>2
11111111 11111111 11111111 11111101
-1
11111111 11111111 11111111 11111100
取反
00000000 00000000 00000000 00000011
=3 ---> -3
不带符号的右移两位。>>>2
00111111 11111111 11111111 11111101
=
<<:左移
>>:带符号右移,算术右移
>>>:无符号右移,逻辑右移
步骤:
1、遇到移位操作符,首先将数字转换为二进制的表示形式(补码)
2、再考虑是左移还是右移
3、再考虑补0还是补1
6)位运算操作符
& 与运算
1&1->1, 1&0->0, 0&1->0, 0&0->0;
| 或运算
1|1->1, 1|0->1, 0|1->1, 0|0->0;
^ 异或运算
1^1->0, 0^0->0,1^0->1, 0^1->1;
相同为0 不同为1
运算特点: a^0=a; a^a=0;
~ 取反运算
~1->0, ~0->1;
7)逻辑操作符
短路操作符,如果能根据操作左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;
短路与
&& 左边的布尔表达式的值为false, 整个表达式值肯定为false, 此时会忽略执行右边的布尔表达式。
false&&true
int a = 1;
int b = 2;
int c = 3;
a>b&&c>b
//没有短路功能
a>b&c>b
短路或
|| 左边的布尔表达式的值为true, 整个表达式值肯定为true, 此时会忽略执行右边的布尔表达式。
注意:&和&&的区别是什么? |和||的区别是什么?
8)三目运算
形式:
布尔表达式 ? 表达式1 : 表达式2;
如果上面布尔表达式的值为true, 就返回表达式1的值, 否则返回表达式2的值。
例如:
int score = 61;
String result = (score>=60?"及格":"不及格");