java - 使用长度为 0 的数组?

标签 java arrays

<分区>

char[] arrNew = new char[0];
System.out.println(arrNew.length);  // length = 0
arrNew[0]='c'; // ArrayIndexOutOfBoundsException .

在上面的代码中,您可以清楚地看到大小为 0 的数组没有意义。据我所知,大小为 0 的数组没有实际用途。有人可以解释为什么编译器允许创建 0 长度数组。还有 0 长度数组与初始化为空的数组有何不同? (即,是否像普通数组一样分配给它的内存?)。如果这个问题看起来很愚蠢,我很抱歉。

最佳答案

我们可以从方法中返回一个空数组而不是 null,这称为 Null 对象设计模式。考虑以下代码

    Person[] res = find(name);
    for(String e : res) {
        System.out.println(e);
    }

如果 find() 没有找到任何人,它返回一个空数组。如果 find 返回 null,则代码需要将其视为特殊情况。

我们应该记住,空数组是不可变的,因此使用单例而不是每次都创建它是合乎逻辑的

private static final Person[] NULL = new Person[0];

Person[] find(String name) {
     ...
     if (notFound) {
           return NULL;
     }
     ...

关于java - 使用长度为 0 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231237/

相关文章:

c - C语言重新初始化指针

java - 云端数值计算环境? [ 本科项目 ]

java - 使用索引递归地从 LinkedList 中删除 Odds

php - 在php中使用Ajax传递的数组向MYSQL数据库表中插入记录

c - C 中的二维数组

java - Java中的数组索引问题

javascript - 将新的逗号分隔数字字符串推送到现有数组

java - 关闭 BufferedReader/PrintWriter 是否会关闭套接字连接?

java - 如何使用 Java 参数中的索引使用递归创建删除方法?

java - JDBC - 从文本文件加载数据