一道基础题 int a = 3;System.out.println(a+=a-=a*a;);请问答案是多少?为什么?最好能详细的说说. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看一下怎么处理的就知道了public class Main { public static void main(String[] args) { int a = 3; System.out.println(a += a -= a * a); }}Compiled from "Main.java"public class Main extends java.lang.Object{public Main(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: returnpublic static void main(java.lang.String[]); Code: 0: iconst_3 1: istore_1 2: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 5: iload_1 6: iload_1 7: iload_1 8: iload_1 9: imul 10: isub 11: dup 12: istore_1 13: iadd 14: dup 15: istore_1 16: invokevirtual #3; //Method java/io/PrintStream.println:(I)V 19: return}看那四个load就明白了. int a = 3; System.out.println(a+=a-=a*a;); 这么写多了一个; 是错的 -3;a+=a-=a*a --> (a+a)-=a*a--> (a+a)-a*a所以a=-3,不知道这样理解可以么 a+=a-=a*a从右向左算, a*a = 9, a-=9 = -6 , a+=(-6) = -3 a+=a-=a*a------>> 1. a-=a*a-->a=a-a*a 2. a+=a-=a*a-->a=a+(a-a*a) 所以为:-3 分析一下,可能不对希望大家指点:首先介绍一下int x=3; x+=7和x=x+7的区别,大家都知道x=x+7,是取了两次地址x=3,x=3,3+7=10;x=10;而x+=7就是x=3,3+7=10,x=10。下面回到int a = 3;System.out.println(a+=a-=a*a;);首先a+=a-=a*a;就不对,应该去掉“;”,然后+=,-=运算符是从右到左运算的,但是并不说明取a的地址也是从右到左,我个人觉得应该是a=3(a+=的"a"),a=3(a-=的"a"),a=3(a*a的第一个"a"),a=3(a*a的第二个"a"),结果是a-=9,a=-6,这个时候会在栈中查找有没有6这个数,如果有就指向6,如果没有就创建6,而a+=中的a依然指向3所以a+=a后就是a=3-6结果是-3; -3先从左到右运算,然后按运算符的优先级进行分析即可以得到:a=(a+a)-(a*a) 很无奈a=(a+a)-(a*a)?ora=a-6? android高手来帮帮我啊啊啊啊啊啊啊啊啊啊啊啊。。。 介绍一本JVM原理的书 关于Layout 急...在线等,jstl问题 程序编译成功,运行时不能输入数字,这是什么问题啊? static int x1 = prt("x1");是什么意思? BYTE[]数组如何存储文件 如果进行垃圾回收!!!! 垃圾回收有何用处???? 请高手指教!!!!!!!!!!!!!!!! 简单的问题。在java中求正玄,余玄,正切,余切之类的函数是什么? 我开始学JAVA,各位咄咄指导.谢谢!! 寻物启事:sql server 2005驱动包 java安装程序制作
public class Main { public static void main(String[] args) { int a = 3;
System.out.println(a += a -= a * a); }
}
Compiled from "Main.java"
public class Main extends java.lang.Object{
public Main();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: returnpublic static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
5: iload_1
6: iload_1
7: iload_1
8: iload_1
9: imul
10: isub
11: dup
12: istore_1
13: iadd
14: dup
15: istore_1
16: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
19: return}看那四个load就明白了.
System.out.println(a+=a-=a*a;);
这么写多了一个; 是错的
a+=a-=a*a --> (a+a)-=a*a--> (a+a)-a*a
所以a=-3,不知道这样理解可以么
从右向左算, a*a = 9, a-=9 = -6 , a+=(-6) = -3
首先介绍一下int x=3; x+=7和x=x+7的区别,大家都知道x=x+7,是取了两次地址x=3,x=3,3+7=10;x=10;而x+=7
就是x=3,3+7=10,x=10。下面回到
int a = 3;
System.out.println(a+=a-=a*a;);
首先a+=a-=a*a;就不对,应该去掉“;”,然后+=,-=运算符是从右到左运算的,但是并不说明取a的地址也是
从右到左,我个人觉得应该是a=3(a+=的"a"),a=3(a-=的"a"),a=3(a*a的第一个"a"),a=3(a*a的第二个"a"),
结果是a-=9,a=-6,这个时候会在栈中查找有没有6这个数,如果有就指向6,如果没有就创建6,而a+=中的a依然
指向3所以a+=a后就是a=3-6结果是-3;
先从左到右运算,然后按运算符的优先级进行分析即可以得到:a=(a+a)-(a*a)
or
a=a-6?