一、运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算法运算符
正号、负号、加减乘除、取模(取余)
++自增(前),先运算后取值。
++自增(后),先取值后运算。
--自减(前),先运算后取值。
--自减(后),先取值后运算。
- ,字符串连接。
%取模(取余),余数符号跟被除数相同。
小程序:
class Test{
public static void main(String[] args){
int i1 = 12;
int i2 = 5;
double d1;
double d2;
d1=i1 / i2;
d2=i1 / (i2+0.0);
System.out.println(d1);
System.out.println(d2);
System.out.println("i1 % i2=" + i1 % i2);
int i3 = 10;
int t1 = ++i3;
System.out.println("i3 = " + i3 + ",t1 = " +t1);
int i4 = 10;
int t2 = i4 ++;
System.out.println("i4 = " + i4 + ",t2 = " + t2);
int i5 = 187;
System.out.println("百位数是" + i5 / 100);
System.out.println("十位数是" + i5 % 100 / 10);
System.out.println("个位数是" + i5 % 10);
}
}
$ javac Test.java
$ java Test
2.0
2.4
i1 % i2=2
i3 = 11,t1 = 11
i4 = 11,t2 = 10
百位数是1
十位数是8
个位数是7
赋值运算符
符号:=
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值
扩展赋值运算符:+=,-+,*=,/=,%=
通常写法:
i2=j2=10;
i3=10,j3=20;
int num1=10;
num1+=2; //12
int num2 = 12;
num2 % =5;//2
short s1=10;
s1 + = 2;//不会改变变量本身数据类型
s1 = s1 + 2;//报错
比较运算符(关系运算符)
运算符 运算 范例 结果
== 相等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
Ø 大于 4>3 true
<= 小于等于 4<=3 false
= 大于等于 4>=3 true
instanceof 检查是否是类的对象 “Hello” instaceof String true
比较运算符的结果都是boolean型,要么是true,要么是false
比较运算符“==”不能误写成“=”
逻辑运算符
& 逻辑与 | 逻辑或 ! 逻辑非
&& 短路与 || 短路或 ^ 逻辑异或
123
a b a&b a&&b a|b a||b !a a^b
true ture true true true true false false
true false fasle fasle true true false true
fasle true false false true true true true
fasle false false false fasle false true false
&与&&区分
相同点:运算结果相同;当符号左边是true时,二者都会执行右边的运算。
不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行右边的运算。
同理|与||,当符号左边为true时,|继续执行右边的运算,||不再执行右边的运算。
开发中推荐使用||
例子
class Luoji{
public static void main(String[] args){
boolean b1 = false;
int i1 = 10;
if(b1 & (i1++ > 0)){
System.out.println("我现在在南京");
} else{
System.out.println("我现在在北京");
}
System.out.println(i1);
boolean b2 = false;
int i2 = 10;
if(b2 && (i2++ >0)){
System.out.println("我现在在南京");
} else{
System.out.println("我现在在北京");
}
System.out.println(i2);
}
}
$ javac Luoji.java
$ java Luoji
我现在在北京
11
我现在在北京
10
位运算符(用的很少,二进制)
操作的都是整型变量,在一定范围内每左移一位相当于*2,右移相当于/2
面试题:最高效方式计算2*8? 2<<3或8<<1
运算符 运算 范例
<< 左移(2) 3<<2=12 32*2=12
右移(/2) 3>>1=1 3/2=1
无符号右移 3>>>1=1 3/2=1
& 与运算符 6&3=2,转换2进制,01计算
| 或运算符 6|3=7,同上
^ 异或运算 6^3=5,同上
~ 取反运算 ~6=-7,包括符号位全部取反
三元运算符
格式:条件表达式?表达式1:表达式2
条件表达式为true,运算结果是表达式1;false为表达式2
表达式1和2为同种类型。
三元运算符可以嵌套使用
三元运算符与if-else的联系和区别
1、三元运算符可以简化if-else语句
2、三元运算符要求必须返回一个结果
3、if后的代码块可以有多个语句。
条件表达式为boolean类型,根据条件表达式决定执行1或者2.
例子,3个数取最大值:
$ vim SanYuan.java
class SanYuan{
public static void main(String[] args){
int n1=12;
int n2=30;
int n3=-43;
int max=((n1>n2?n1:n2)>n3)?(n1>n2?n1:n2):n3;
System.out.println("The max of n1 n2 n3 is " + max);
}
}
$ javac SanYuan.java
$ java SanYuan
The max of n1 n2 n3 is 30