执行语句"int a=12;a+=a-=a*a;"后a的值是多少,为什么
展开全部
这是哪个试卷上面的题目吧,哈哈哈,做项目的时候用这种表达式要被骂死的,项目中表达模糊的时候要加上括号
分割线——————————————————————————————
2018年6月8日16:12:40
编译前(.java文件):
public class Test implements Serializable {
public static void main(String[] args) {
int a = 12;
a += a -= a * a;
System.out.println(a);
}
}
编译后(.class文件):
public static void main(String[] args) {
int a = 12;
int a = a + (a = a - a * a);
System.out.println(a);
}
javap 查看字节码:
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=2, args_size=1
0: bipush 12 // 常量int类型的12入栈(当int取值-1~5采用iconst指令,取值-128~127采用bipush指令,取值-32768~32767采用sipush指令,取值-2147483648~2147483647采用 ldc 指令。)
2: istore_1 // 弹出栈顶元素12存入位置1的局部变量中
3: iload_1 // 从位置为1的局部变量中取出元素int类型的12压入栈
4: iload_1 // 从位置为1的局部变量中取出元素int类型的12压入栈
5: iload_1 // 从位置为1的局部变量中取出元素int类型的12压入栈
6: iload_1 // 从位置为1的局部变量中取出元素int类型的12压入栈
7: imul // 执行int类型的乘法
8: isub // 执行int类型的减法
9: dup // 复制栈顶的值(-132)压入栈顶,操作结束时栈内-132,-132,12
10: istore_1 // 弹出栈顶的值(-132)赋值给变量a,操作结束时栈内 -132,12
11: iadd // 栈值相加,结果压入栈。操作结束时栈内 -120
12: istore_1 // 关键在这里,将栈顶的值 -120 弹出赋值给变量a,所以计算结束后a的值是-120
13: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
16: iload_1
17: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
20: return
LineNumberTable:
line 13: 0
line 14: 3
line 15: 13
line 16: 20
LocalVariableTable:
Start Length Slot Name Signature
0 21 0 args [Ljava/lang/String;
3 18 1 a I
}
具体过程,看后面备注
分割线————————————————
2018年6月8日17:55:37
上面的操作结果和解释都是java的,才发现问题问的是Pascal的,可能结果会不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询