- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符
1、+,-,*,/,%,++,–
2、+的用法:a:加法,b:正号,c:字符串连接符
3、/和%的区别:数据做除法操作的时候,/取得是商,%取得是余数
4、++和–的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
**参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;
下面看几个代码,加深一下印象
//++,--单独使用的情况
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++; //a=10,b=11,c=10
c = --a; //a=9,b=11,c=9
b = ++a; //a=10,b=12,c=9
a = c--; //a=9,b=12,c=8
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
}
//++,--参与操作使用
public static void main(String[] args) {
int x =4;
int y =(x++)+(++x)+(x*10);
// y = 4 + 6 + 60
// x = 6
System.out.println("x:"+x);
System.out.println("y:"+y);
}
public static void main(String[] args) {
/**
* 注意&&有短路情况
* 每步结果
* x y k
* 1 0 0
* 2 0 0
* 3 1 0
* 4 2 0
* 5 3 1
* 5 3 1
* */
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
System.out.println(x + " " +y +" " +k);
}
System.out.println(x + " " +y +" " +k);
}
赋值运算符
1、=,+=,-=,*=,/=,%=等
2、=叫做赋值运算符,也是最基本的赋值运算符
3、扩展的赋值运算符的特点,隐含了自动强制转换。
下面看一道面试题,理解一下赋值运算符的特点,隐含了自动强制转换
short s = 1;
s = s + 1;
short s = 1;
s += 1;
请问上面的代码哪个有问题?
s = s + 1;//有问题,因为s+1是int类型,不能赋值给short类型
s += 1; //没有问题,s += 1 不等价 s = s + 1
//而是等价 s = (s的数据类型)(s + 1);
比较运算符
1、==,!=,>,>=,<,<=
2、无论运算符两端简单还是复杂最终结果是boolean类型。
3、千万不要把==写成了=
逻辑运算符
“&”和“&&”的区别
单&时,左边无论真假,右边都进行运算
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参加运算
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或(^)与或(|)的不同之处:当左右都为true时,结果为false
逻辑与(&):有false则false
逻辑或(|):有true则true
逻辑异或(^):相同为false,不同为true
逻辑非(!):偶数个不改变本身
位运算符
//^的特点,一个数据对另一个数据位异或两次,该数本身不变
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a ^ b ^ b); //10
System.out.println(a ^ b ^ a);//20
}
//面试题:请自己实现两个整数变量的交换
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量(开发用)
int temp = a;
a = b;
b = temp;
System.out.println("a:"+a+",b:"+b);
//方式2:用异或实现(面试用)
//左边:a,b,a 右边:a^b
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
//方式3:用变量相加
a = a + b; //a = 30
b = a - b; //b = 10
a = a - b; //c = 20
System.out.println("a:"+a+",b:"+b);
//方式4:一句话搞定
b = (a+b) - (a=b); //b=30-20 a=20
System.out.println("a:"+a+",b:"+b);
}
\
//面试题:请用最有效率的方式计算出2乘以8的结果
2<<3