Java中长度为零的数组

5
以下代码
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);  // [I@659e0bfd
        if(member == null){
            System.out.println("member is null");
        }
    }
}

很明显,在零长度数组中无法添加元素。

如果ic不是null,那么它指向什么?

根据下面的图示,ic是否指向内存位置659e0bfd(为空)?

enter image description here

3个回答

4
如果ic不为空,它指向一个零容量的空数组。数组是引用类型,像任何其他引用类型一样,为它们分配内存空间。

根据上述代码,内存地址659e0bfd处的空数组是什么意思? - overexchange
1
@overexchange 输出的哈希码可能与内存地址有关,但它并不是内存地址本身。请参见https://dev59.com/H3E95IYBdhLWcg3wmvKh - Christian Semrau
@overexchange 是的,obj1 == obj2 检查这两个变量是否引用同一内存中的对象。Java 没有获取内存地址的机制。 - M A

3

想象一下数组就像一个盒子。你可以声明一个容量为3的盒子。

int[] x = new int[3];

然后你会得到这个方框:[_,_,_]。你可以在里面填写一些数字。

x[1] = 9;

要获得[_,9,_],而你实际上声明了一个零容量的盒子。

int[] x = new int[0];

为了获得这个: []。猜猜如果你尝试向其中添加一个元素会发生什么?你是不能的。
所以,回答你的问题,ic 指向的是一个空的(并且容量为零)盒子。

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接