Java运算符
3.运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。包括:算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符。
3.1算术运算符:
正号: + 负号: -
加号: + 减号: - 乘号: * 除号: / 取模: %
前/后置加: ++ 前/后置减 –
连接符: +
注意:1)除:/
int i = 12;
int j = i/5;
double d = i / 5;
double d1 = i/5.0;
System.out.println(j);//2
System.out.println(d);//2.0
System.out.println(d1);//2.4
2)取模:%:取余数. 结果的符号取决于被模数(%左边的数)
int i1 = 12 % 5;
int i2 = -12 % 5;
int i3 = 12 % (-5);
int i4 = -12 % (-5);
System.out.println(i1);//2
System.out.println(i2);//-2
System.out.println(i3);//2
System.out.println(i4);//-2
3)前++:先自增1,后做运算;后++:先做运算,后自增1
--------------------------------------------------------------------------
int myInt1 = 10;
int myInt2 = myInt1++;//后++
System.out.println(myInt1);//11
System.out.println(myInt2);//10
------------------------------------------------------------------------
int myInt3 = 10;
int myInt4 = ++myInt3;//前++
System.out.println(myInt3);//11
System.out.println(myInt4);//11
-----------------------------------------------------------------------------
4)连接符 +:String字符串与其他数据类型只能做连接运算,且结果为String类型。
“+”除字符串相加功能外,还能把非字符串转换成字符串。
【举例】:
class Testjia
{
public static void main(String[] args)
{
System.out.println("5+5="+5+5); //输出:5+5=55
System.out.println('*' + '\t' +'*');//输出:93
System.out.println("*" + '\t' +'*');//输出:* *
}
}
3.2赋值运算符:
= += -= *= /= %=
【举例】
int i= 12;
i = i * 5;
i *= 5;//与上一行代码同样的意思
【注意】
short s = 10;
s = s + 5;//报编译的异常
s = (short)(s + 5);//不建议如此实现,容易损失精度
s += 5;//既可以实现运算,又不会改变s的数据类型。
3.3比较运算符(关系运算符)
== !=
> < > = <=
instanceof 检查是否是类的对象
【举例】
范例 |
结果 |
“Hello” instanceof String |
true |
“Hello” instanceof System |
false |
【注意】
① 区分 == 与 = 区别。
② 进行比较运算操作以后,返回一个boolean类型的值,要么是true,要么是false。
4 >= 3 表达的是4 > 3或者 4 = 3。结果是true。
③if(i > 1 && i < 10){ } 不能写为:if(1 < i < 10){ }
3.4逻辑运算符(运算符的两端是boolean值)
& 逻辑与 | 逻辑或 ! 逻辑非
&& 短路与 || 短路或 ^ 逻辑异或
a |
b |
a&b |
a|b |
!a |
a^b |
a&&b |
a||b |
true |
true |
true |
true |
false |
false |
true |
true |
true |
false |
false |
true |
false |
true |
false |
true |
false |
true |
false |
true |
true |
true |
false |
true |
false |
false |
false |
false |
true |
false |
false |
false |
【注意】
①逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
②“&”和“&&”的区别:
- 单&时,左边无论真假,右边都进行运算;
- 双&时,如果左边为真,右边参与运算,如果左边为假,则右边不参与运算。
“|”和“||”区别同理,||时:左边为真,右边不参与运算。我们使用的时候,选择&&和||
③异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
理解:异或,追求的是“异”!
3.5位运算符(两端是数值类型的数据)
位运算是直接对二进制进行运算,注意:无<<<(无符号左移)
运算符 |
运算 |
范例 |
<< |
左移 |
3 << 2 = 12 --> 3*2*2=12 ;m<<n结果:m*(2^n) |
>> |
右移 |
3 >> 1 = 1--> 3/2=1 ;m>>n结果:m/(2^n) |
>>> |
无符号右移 |
3 >>> 1 = 1 --> 3/2=1;m>>>n结果:m/(2^n) |
& |
与运算 |
6 & 3 = 2 |
| |
或运算 |
6 | 3 = 7 |
^ |
异或运算 |
6 ^ 3 = 5 |
~ |
反码 |
~6 = -7 |
【规则】
① 左移(二进制左移n位,低位补0)有限度,正数的二进制左移后,首位变1了就错了
② 右移:二进制右移n位,原来最高位是几,高位就补几
③ 无符号右移:二进制右移n位,无论高位是几,高位都补0
④ 与运算:左右两端数的二进制所对应位都是1则变1,否则为0,所得二进制数为结果
⑤ 或运算:左右两端数的二进制所对应位至少有一个是1则变1,否则为0,所得二进制数为结果
⑥ 异或运算:左右两端数的二进制所对应位不同则变1,否则为0,所得二进制数为结果
⑦ 反码:该数的二进制对应位1变0,0变1,最后所得二进制数为结果
【小练习】
交换两个变量的值
//方法一:提供一个临时变量。
Int temp = m;
m = n;
n = temp;
System.out.println("m:" + m + " n:" + n);
//方法二:当m和n较大时,有可能出现精度损失
m = m + n;//m = 12 + 5;
n = m - n;//n = 17 - 5;
m = m - n;//m = 17- 12
System.out.println("m:" + m + " n:" + n);
//方法三:优点:没有上面两种方法的缺点。缺点:难!
m = m ^ n;
n = m ^ n; //(m ^ n) ^ n == m
m = m ^ n; //(m ^ n) ^ m == n
System.out.println("m:" + m + " n:" + n);
3.6三元运算符
(条件表达式)?表达式1 :表达式2;
若条件表达式结果为true,运算后的结果是表达式1;
若条件表达式结果为false,运算后的结果是表达式2;
【注意】
① 既然是运算符,一定会返回一个结果,并且结果的数据类型与表达式1,2的类型一致
② 表达式1与表达式2 的数据类型一致。
③ 三元运算符与if-else的联系与区别:三元运算符可简化if-else语句;三元运算符要求必须返回一个结果;if后的代码块可有多个语句;使用三元运算符的,一定可以转换为if-else,反之不一定成立。
【小练习】如何使用三元运算符,输出三个数中的较大值。
int m = 12;int n = 23;int k = -9;
int max1 = (m > n)? m : n;
int max2 = (max1 > k)? max1 : k;
System.out.println(max2);
3.7运算符的优先级
●运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行;只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
【小练习】输出60的十六进制。
int i = 60;
//法一:自动调用Integer类现成的方法
String binary = Integer.toBinaryString(i);System.out.println(binary);
String hex = Integer.toHexString(i);System.out.println(hex);
//法二:手动的方式,从控制台输出60的十六进制。
/*
char c = 'a';
char c1 = (char)(c + 2);
System.out.println(c1);//c
*/
int j = i & 15;//获取到i的最低4位对应的值。
String k1 = (j <= 9)? j + "" : (char)(j - 10 + 'a') + "";
i = i >> 4;
int z = i & 15;
String k2 = (z <= 9)? z + "" : (char)(z - 10 + 'a') + "";
System.out.println(k2 + k1);