public class caozi {
public static void main(String[] args) 
{
int a[] = {11,12,13,14,15};
int b[] = {1,2,3,4,5};
System.out.println(a[(a=b)[0]]);
System.out.println(a[(a=b)[0]]);
}
}
结果输出什么?

解决方案 »

  1.   

    先加载数组 a,a = b 的话,那 a 就是 {1,2,3,4,5} 了,第 [0] 个元素就是“1”,这样就输出 12 了。由于 a 已经是 {1,2,3,4,5} 了,先加载,同理输出“2”。
      

  2.   

    学习中谢谢 bao110908(火龙果)的分析!
      

  3.   

    bao110908(火龙果)的说法好像接触到实质问题了,能不能在深入和详细点
      

  4.   

    如果换成C语言,数组a=数组b会是什么结果?
      

  5.   

    下面是使用 javap -c Test 输出的第一个 System.out.println 的虚拟机指令。a 变量为 1 号,b 变量为 2 号。26: getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;
    29: aload_1  // 从变量中将 a 的数据读入
    30: aload_2  // 从变量中将 b 的数据读入
    31: dup    // 从栈顶将 2(也就是 b 数据) 取出
    32: astore_1  // 将 b 的数据存入到变量 1(也就是 a) 中,注意,a 中的值在第 29 行已经读入内存了
    33: iconst_0  // 将常数 0 压入栈中
    34: iaload   // 从数组(也就是从 aload_2 中获得值)中装载 0
    35: iaload   // 再从数组(也就是从 aload_1 的值)中装载上一行取出的值
    36: invokevirtual  #3; //Method java/io/PrintStream.println:(I)V不知道我说清楚了没有,也就是说在运算完之前,a 的值已经被加载到内存中去了,它的值再怎么变也不会影响到内存中已经读出的值。
      

  6.   

    bao110908(火龙果) ( ) 信誉:100 高手
      

  7.   

    to: amazeur我不是高手啦,这些虚拟机的指令是从一本叫《Java 虚拟机规范》里面看来的,或者说是抄来的,嘻嘻~~
      

  8.   

    按楼主的思路,这个问题好像是普遍存在的
    看看下面的:
    public static void main(String[] args) {
    StringBuilder s1 = new StringBuilder("12345");
    StringBuilder s2 = new StringBuilder("abcde");
    System.out.println(s1.append((s1=s2).charAt(0)));
    System.out.println(s1.append((s1=s2).charAt(0)));
    }
      

  9.   

    a[(a=b)[0]]
    运行顺序
    创建a[]
    再a=b
    再取a[0]
    最后返回求a[X]--------------------------
    System.out.println(a[(a=b)[0]]);
    System.out.println(a[(a=b)[0]])
    运行等价
    System.out.println(a[(a=b)[0]]);
    System.out.println(a[a[0]])
      

  10.   

    应该把第二个的println的虚拟机指令也打出来
    运行第二个println的时候,a[]的内容被重新读取了对吧?是不是后面的每次对a[]或b[]的操作都要重新读取呢?
      

  11.   

    bao110908(火龙果) 的答案是正确的,解释也是正确的。
      

  12.   

    public class Test {
    public static void main(String[] args) 
    {
    int a[] = {11,12,13,14,15};
    int b[] = {1,2,3,4,5};System.out.println(a[b[0]]);
     a=b;
    System.out.println(a[(a[0])]);
    }
    }