这句话
int[] arr = new int[]{1, 2, 3};
问题:
1. 栈帧里边的arr接收到的地址是存储整型数值1的地址吗?
2. 如果arr存的是一个地址,当赋值的时候JVM是怎么知道new出来的是整型数组而进行匹配的.比如说
long[] arr = new int[]{1, 2, 3};
就会报错
3. 如果直接
System.out.println(arr);
打印出来的hashcode是什么含义?
求大神解答,一直在等
http://blog.csdn.net/fengzijia/article/details/49821853
Java中的数组和c完全不一样,Java中的数组需要当做对象看待。
创建数组对象之后,本地变量arr存储的只是一个内存地址,指向了堆中的数组对象。
看看这句代码编译之后的字节码,你应该会更清楚一些:
java代码 int[] arr = new int[]{1, 2, 3};
对应的字节码:
0: iconst_3 # 栈顶压入整形(3)
1: newarray int # 使用栈顶的数字(3)作为长度,创建int数组
3: dup #
4: iconst_0 # 栈顶压入整形(0)
5: iconst_1 # 栈顶压入整形(1)
6: iastore # 将栈顶的值(1)存入数组对象的第(0)个位置
7: dup #
8: iconst_1 # 栈顶压入整形(1)
9: iconst_2 # 栈顶压入整形(2)
10: iastore # 将栈顶的值(2)存入数组对象的第(1)个位置
11: dup #
12: iconst_2 # 栈顶压入整形(2)
13: iconst_3 # 栈顶压入整形(3)
14: iastore # 将栈顶的值(3)存入数组对象的第(2)个位置
15: astore_1 # 将指令1创建数组对象的引用地址写入第一个本地变量