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]]);
}
}
结果输出什么?
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]]);
}
}
结果输出什么?
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 的值已经被加载到内存中去了,它的值再怎么变也不会影响到内存中已经读出的值。
看看下面的:
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)));
}
运行顺序
创建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]])
运行第二个println的时候,a[]的内容被重新读取了对吧?是不是后面的每次对a[]或b[]的操作都要重新读取呢?
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])]);
}
}