变量的运算规则
1.算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 7%5 | 2 |
++ | 自增(前): 先运算后取值 | a=2;b=++a; | a=3;b=3 |
++ | 自增(后): 先取值后运算 | a=2;b=a++; | a=3;b=2 |
- - | 自减(前):先运算后取值 | a=2;b=–a; | a=1;b=1; |
- - | 自减(后): 先取值后运算 | a=2;b=a–; | a=1;b=2 |
+ | 字符串连接 | “He”+“llo” | “Hello” |
1) 除法运算
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;//结果为2
int result2 = num1 / num2 * num2;//结果为10
//这里除以一个数再乘这个数并不等于原数
double result3 = num1 / num2;//结果为2.0
double result4 = num1 / num2 + 0.0;//结果为2.0
double result5 = num1 / (num2 + 0.0);//结果为2.4
double result6 = (double)num1 / num2;//结果为2.4
double result7 = (double)(num1 / num2);//结果为2.0
2)取模运算
int m1 = 12;
int n1 = 5;
result1 = m1 % n1;//结果为2
int m2 = -12;
int n2 = 5;
result2 = m2 % n2;//结果为-2
int m3 = 12;
int n3 = -5;
result3 = m3 % n3;//结果为2
int m4 = -12;
int n4 = -5;
result4 = m4 % n4;//结果为-2
*结论:结果的符号与被模数的符号相同
3)自增
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);//结果为a1=11,b1=11
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);//结果为a2=11,b2=10
a)(前)++:先自增1,后再运算
b)(后)++:先运算,后自增1
4)自减
int a1 = 10;
int b1 = --a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);//结果为a1=9,b1=9
int a2 = 10;
int b2 = a2--;
System.out.println("a2 = " + a2 + ",b2 = " + b2);//结果为a2=9,b2=10
a)(前)- -:先自减1,后再运算
b)(后)- -:先运算,后自减1
* ++/- -不会改变变量的类型
2.赋值运算符
1)符号:“ = ”;(支持连续赋值)
2)扩展赋值运算符:+=,-=,*=,/=,%=
short s1 = 10;
s1 = s1 + 2;//编译失败
s1 += 2;//12,不会改变变量本身的数据类型
3.比较运算符(关系运算符)
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | “Hello" instanceof String | true |
(*)比较运算符的结果都是boolean类型,要么是true,要么是false
4.逻辑运算符
(*)逻辑运算符操作的都是boolean类型的
1)& 与 && 的区别( | 与 || 类似)
boolean b1 = true;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京...");
}else{
System.out.println("我现在在上海...");
}
System.out.println("num1 = " +num1);
//我现在在北京
//num1=11;
boolean b2 = true;
int num2 = 10;
if(b2 && (num2++ > 0)){
System.out.println("我现在在北京...");
}else{
System.out.println("我现在在上海...");
}
System.out.println("num2 = " +num2);
//我现在在北京
//num2=11;
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京...");
}else{
System.out.println("我现在在上海...");
}
System.out.println("num1 = " +num1);
//我现在在上海
//num1=11;
boolean b2 = true;
int num2 = 10;
b2 = false;
if(b2 && (num2++ > 0)){
System.out.println("我现在在北京...");
}else{
System.out.println("我现在在上海...");
}//b2已经为false,后面不执行(可以理解为短路)
System.out.println("num2 = " +num2);
//我现在在上海
//num2=10;
相同点:
a) &与&& 运算结果相同
b) 当符号左边为true时,二者都会执行符号右边的运算
不同点:
a) 当符号左边为false时,&继续执行符号右边的运算,而&&则不执行
5.位运算符
*区分位运算符与逻辑运算符取决于操作的数据类型,boolean类型则是逻辑运算符,反之位运算符
6.三元运算符
格式: (条件表达式) ?表达式1 : 表达式2
条件表达式为true则运算结果是表达式1
条件表达式为false则运算结果是表达式2