java中数组赋值的问题

这句话

 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创建数组对象的引用地址写入第一个本地变量