int a = 3;
System.out.println(a+=a-=a*a;);
请问答案是多少?为什么?最好能详细的说说.

解决方案 »

  1.   

    看一下怎么处理的就知道了
    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就明白了.
      

  2.   

    int a = 3; 
    System.out.println(a+=a-=a*a;); 
    这么写多了一个; 是错的
      

  3.   

    -3;
    a+=a-=a*a --> (a+a)-=a*a--> (a+a)-a*a
    所以a=-3,不知道这样理解可以么
      

  4.   

    a+=a-=a*a
    从右向左算, a*a = 9, a-=9 = -6 , a+=(-6) = -3
      

  5.   

    a+=a-=a*a------>> 1. a-=a*a-->a=a-a*a  2. a+=a-=a*a-->a=a+(a-a*a)   所以为:-3
      

  6.   

    分析一下,可能不对希望大家指点:
    首先介绍一下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;
      

  7.   

    -3
    先从左到右运算,然后按运算符的优先级进行分析即可以得到:a=(a+a)-(a*a)
      

  8.   

    很无奈a=(a+a)-(a*a)?
    or
    a=a-6?