2015-07-12 62 views
4

下面代码阵列零长度的在Java

public class Example { 
    static int[] member; 
    public static void main(String[] args) { 
     int[] ic = new int[0]; 
     if (ic == null){ 
      System.out.println("ic is null"); 
     } 
     System.out.println(ic); // [[email protected] 
     if(member == null){ 
      System.out.println("member is null"); 
     } 
    } 
} 

很明显,元件不能零长度数组加入。

ic指的是什么,如果ic不是null

根据下图,指向内存位置659e0bfd(它是空的)是ic

enter image description here

回答

4

如果它不为空,ic指向什么?

它指向一个零容量的空数组。数组是引用类型,并像其他引用类型一样为它们分配内存空间。

+0

根据上述代码在内存地址为'659e0bfd'的空数组? – overexchange

+1

@proxchange为数组输出的哈希码可能与内存地址有关,但它不是内存地址本身。请参阅http://stackoverflow.com/questions/2237720/what-is-an-objects-hash-code-if-hashcode-is-not-overridden –

+0

@overchange是'obj1 == obj2'检查两个变量参考内存中的同一个对象。 Java没有获取内存地址的机制。 – manouti

2

ic指为空数组的实例。它不包含任何元素(ic[i]会为i的每个值抛出ArrayIndexOutOfBoundsException),但它不为空。

2

想象一个数组作为一个盒子。你可以声明一个容量为3的盒子,比如3

int[] x = new int[3]; 

你会得到这个盒子:[_,_,_]。您可以填写一些数字

x[1] = 9; 

得到[_,9,_]。你做了什么,而是被宣告了零容量箱

int[] x = new int[0]; 

得到这个:[]。并猜测如果你尝试向它添加一个元素会发生什么?你不能。

因此,要回答你的问题,ic指向什么?您的空(和零容量)框。