运算符包含6大类:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符。下面分别介绍。
1.算术运算符
1.1 + - * /
- 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只 保留整数部分而舍弃小数部分.
- 注意运算时的自动类型提升。
int i1=12;
int i2=5;
int result=i1/i2; //2
double result1=i1/(i2+0.0);//2.4
double result2=(double) i1/i2;//2.4
System.out.println(result);
System.out.println(result1);//
System.out.println(result2);//
1.2 %
- 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是 负数则不可忽略。此外,取模运算的结果不一定总是整数.
//正数取模为正
5%2=1;
5%(-2)=1;
//负数取模为负
-5%2=-1;
-5%(-2)=1;
1.3自增自减运算 ++,- -
- ++a和a++的异同
- ++a是先增1,再赋值;
- a++是先赋值,再增1;
- ++a不会改变a的类型例如:
short a=10;
a++;
++a;//都可以编译通过,12
int a=10;
int b=++a;//a=11,b=11
//*******
int c=10;
int d=c++;//d=10,c=11;操作顺序是c先赋值给d,然后自增1
//*******
int e=10;
e++;
int f=e;//f=11,e=11
//*******
int g=10;
++g;
int h=g;//g=11,h=11
//****************************
int a=10;
int b=(a++)+(++a);//可以拆分为c=a++,d=++a,b=c+d
//c=10,d=12,a=12,b=22
System.out.println("a="+a);//12
System.out.println("b="+b);//22
2. 赋值运算符
包含 = ,+=,-=,*=,/=,%=
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
- 支持连续赋值,连等。
int i,j;
i=j=10;
- += 等运算符,不会改变数据类型
//*********练习1
short s = 3;
s = s+2; // 编译失败
s += 2; //编译成功
//*********练习2
int i=1;
i*=0.1;//不会改变数据类型,int i=1*0.1=0;
//*********练习3
int n=3,m=2;
n*=m++;//拆解为n=n*m++;
//m先运算m++,符合先赋值,再增1,即n=3*2
System.out.println("n="+n);//6
System.out.println("m="+m);//3
//*********练习4
//*****************
int n=10;
n+=(n++)+(++n);//32
//拆解n=n+(n++)+(++n);
// 10+10+12
3. 比较运算符
4. 逻辑运算符
逻辑运算符针对的是,布尔型变量进行运算。
其中需要注意的是:
- “&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 - “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
- **异或( ^ )**与或( | )的不同之处是:当左右都为true时,结果为false。 理解:异或,追求的是“异”!异或,当双元为异,输出true;当双元为同,输出false;