java中的运算符
1、java中的运算符
- 最小单位是int
1.1 、+ 、-、 * 、/ 、 %
-
+运算
- 算数加法
- 在基本数据类型使用时做加法
- 运算结果如果赋值给取值范围小于int的数据类型时,注意强转
int x = 10; char c1 = 'c'+x; //注意此时需要强转,因为此时已经声明变量x为int
- 追加连接
- String + String
- 算数加法
-
-运算
-
- 算数减法
-
*运算
- 防止计算过程越界=>及时更换取值范围大的类型 -
/运算
- 除法运算过程中不要出现0
-
%【模运算】
- 运算结果的符号取决于参与运算的第一个数字的符号【%运算符左侧的数字】
System.out.println(5%2);//1
System.out.println(-5%2);//-1
System.out.println(5%-2);//1
System.out.println(-5%-2);//-1
1.2 、+=、-=、 *=、/=、%=
- 这一组运算符保证左侧类型不变 ----- 底层可能隐式强转
short x = 45;
x = x + 10;// 报错 int => short
// 解决:x = (short)(x+10);
short y = 45;
y += 10; // 底层隐式强转
int x = 45;// 【*】 类似
// x = x + 10;
x+=10;
// x = 10 + x;// 变成x=x+10
x+=10;
int y = 55;// 【/类似】
y = y - 10;
y -= 10;
/**
y = 10-y;
不能改写 y-=10;
*/
1.3 、++、–【自增\自减运算符】
x++:先取值 再运算
++x:先运算 再取值
x--:先取值 在运算
--x:先运算 再取值
1.4、>、 <、 >= 、<= 、== 、!= 、! =
- 成立/不成立
- !=
- 判断左右两侧的数据是否不相等
- = 和 == 有什么区别
- =:赋值运算符,将符号右侧的内容交给左侧变量保存
- == :条件判断 判断左右两侧的内容是否一致
- 在进行基本数据类型的比较时比较的是内容
- 引用数据类型的比较时比较的是地址
- !取反运算符【用在boolean】
- !true => false
- !false => true
1.5、&&、||、|、&
面试题:&&和&的区别
相同点:都是逻辑与
不同点:&&又叫“短路与”,具有短路特性,当&&左侧运行结果为false时,右侧不在执行;&不具备短路特性,当左侧为false时,右侧依然执行
||和|的区别
相同点:都是逻辑或
不同点:||又叫短路或,具有短路特性,当||左侧的结果为true时,右侧不在执行;|不具备短路特性,左侧为true右侧仍然执行
1.6、&、|、~、^
&按位与【逢0取0】
9&5
00001001
00000101 &
00000000 => 1
|按位或【逢1取1】
9|5
00001001
00000101 |
00001101
~按位取反 【1->0 0->1】
~9
~00001001
11110110
^按位异或【想通为0 不同为1】
00001001
00000101^
00001100 => 12
- 在某种情况下&可以取代%运算
%2 %4 %8 %16 ... %2(n)
&1 &3 &7 &15 ... &2(n)-1
如果(num&num-1) == 0 就表示num是2的n次方
- 交换两个变量的内容
- 开辟第三块空间
int x = 10;
int y = 1;
int temp = x;
x = y;
y = temp;
- 不开辟第三块空间
//使用三次异或
int x = 10;
int y = 1;
x = x ^ y;
y = x ^ y;
x = x ^ y;
1.7、>> 、 <<、>>>位运算
byte x = 10;
x >> 2
00001010 >> 2
00000010
byte y = 7;
y << 2
00000111 << 2
00011100
** 效率取代[* /]
<< 取代 *
*2 *4 *8 ... *2(n)
<<1 <<2 <<3 .. <n
00001010 << 1
00010100 => 4+16 = 20
>> 取代 /
/2 /4 /8 ... /2(n)
>>1 >>2 >>3 ... >>n
10/2=5
00001010 >> 1
00000101 => 5
- 效率取代
num%2(n) => num&2(n)-1
num*2(n) => num<<2(n)-1
num/2(n) => num>>2(n)-1
1.8、?:
三目运算符
- boolean?2:3
- 第一部分肯定为boolean类型
- 如果第一部分为true执行2
- 如果第一部分为false执行3
boolean?2:3
2/3有数字有char
检验数字有没有在char范围内
在char范围内 2/3往char类型转
不在char分为内 将数字直接理解为int 2/3往int转【char类型变成对应的ASCII】