常见的算数运算符:
+ 求和
- 相减
* 乘积
/ 相除
++ 自加1
-- 自减1
% 取余、求模
例子:
int a = 20;
int b = 3;
System.out.println(a+b); //23
System.out.println(a-b); //17
System.out.println(a*b); //60
System.out.println(a/b); //6 因为是int类型,所以结果也是int类型,整数相除只能得到整数。如果想得//到小数,必须把数据变化为浮点数类型。
System.out.println(a%b); //2
//获取的是除法操作的商,%获取的是除法操作的余数
自增自减运算符
单独使用:放在变量的前面和后面效果一样
参与运算的时候:
放在变量的前面,先自增或者自减,然后再参与运算
放在变量的后面,先参与运算,再自增或者自减
例子:1
public class transform {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++; //a=b=10,b=b+1=11
c = --a; //c=a-1=9,a=a-1=9
b = ++a; //b=a+1=10,a=a+1=10
a = c--; //a=c=9,c=c-1=8
System.out.println("a = " + a + ",b = " + b + ",c = " + c);
}
}
output:
a = 9,b = 10,c = 8
2
public class transform {
public static void main(String[] args) {
int x = 4;
int y = (x++)+(++x)+(x*10);
// y= 4 + 6 + 6*10 =70,第一个括号取x未自增前,但是取完值后x自增运算,第二个取//x再次自增后的值,x经过两个括号的运算之后变为6,所以答案为70
System.out.println("x = " + x + ",y = " + y);
}
}
3
public class transform {
public static void main(String[] args) {
byte b = 10;
b = b + 1; //此行错误,b为byte类型,等式后边b+1计算时将b提升为int类型,结果是int类型 //,不是byte类型 ,修改为下行
b=(byte)(b+1)
System.out.println("b = " + b);
}
}
4
public class transform {
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
}
}
output:
0
解释:先用一个临时的变量temp保存变量自增前的值,然后变量自增,
最后自增表达式会把temp的值作为整个表达式的值返回,也就是把temp的值返回给了i,
由于temp保存的是i自增前的值,所以i的值不会变。
对第4个例子,通过反汇编命令(javap -c class文件名) 查看class文件 ,如下
0: iconst_0 //将常量’0’push入操作数栈(operand stack,与普通栈不同)
1: istore_1 //将常量’0’存储到栈(注意不是堆,局部变量存储在栈中)
2: iload_1 //将常量’0’载入到操作数栈
3: iinc 1, 1 //在栈中将a增1,a从’0’变为’1′
6: istore_1 //在操作数栈中将常量”重新存储到栈,a从’1’变回’0′
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return