既然说 数组 是引用 类型
那么 int[]a=new int[]{8,9};  那么a 实际是放在堆中,然后在栈中 放着 它的引用我想问的 是  那么 它的值a[0]和a[1] 是放在堆中吗?
a[0]是int 类型 它应该是放在栈中的吧?
那么a在堆中 那 它到底放着什么数据?
不会是反过来放着 a[0]和a[1]的引用吧?
可能我说的比较乱  
我的意思是 不能 理解  a是引用类型放在堆中,可它的元素却是基本类型 放在 栈中 
int[]a=new int[]{1,2}这段代码 JVM是怎么处理 8和9这两个值的?

解决方案 »

  1.   

    如果按楼上说的那样  数值时放在堆中,栈中的的引用是放在堆中
     那为什么 我       int[] a=new int[]{6,5,7};
                int[]b=new int[]{8,5,9};
               //输出true
               System.out.println(a[1]==b[1]);
       
    String[] str1=new String[]{"不懂","李刚"};
    String[] str2=new String[]{"不懂","李刚"};
                    //输出true        
                    System.out.println(str1[1]==str2[1]);
        
        
     这里我明明创建了分别创建了 不同的 对象 str1和str2 但它们怎么相等的呢?
    它们在栈中的引用如果指向堆  那 应该 指向两个不同的 堆啊!
      

  2.   

    你又不是比较的两个引用,只是比较的属性值,第1个是比较的2个基本数据当然是true
    第2个因为串池的原因也是true
      

  3.   

    看 Thinking in Java 的人就喜欢问这种问题