如何在Java中初始化一个长度为0的字符串数组?

155

java.io.File.list(FilenameFilter filter)方法的Java文档在返回值描述中包含以下内容:

如果目录为空或者没有文件名被过滤,则数组将为空。

我如何做类似的事情,并初始化一个长度为0的字符串数组(或任何其他数组)?


7
我刚刚意识到这是一个愚蠢的问题 :( 因为这些数组的初始化方式与任何其他数组完全相同,只是大小为0。这表明我现在很少初始化数组。我将保留这个问题(不删除它),因为有一天其他人可能会像我现在这样愚蠢 :) - Ron Tuffin
1
我对于长度为0的数组有什么用途感到困惑,为什么在这种特殊情况下你不会简单地初始化为null - Blake
7个回答

262

正如其他人所说的那样,

new String[0]

确实会创建一个空数组。然而,数组有一个好处——它们的大小不会改变,因此您始终可以使用相同的空数组引用。因此,在您的代码中,您可以使用:

private static final String[] EMPTY_ARRAY = new String[0];

然后每次需要时只需返回EMPTY_ARRAY——没必要每次都创建一个新对象。


8
似乎每个人都喜欢打出这行代码: private static final String[] EMPTY_ARRAY = {}; - Thomas Jung
8
@Thomas: 我理解你的意思,但对于这个特定情况,我更倾向于使用更明确的表达方式。对我来说,"我想要一个0元素的字符串数组"比"我想要一个内容为空的数组"更加清晰明了。这只是我的个人偏好。 - Jon Skeet
2
@Tony - 我必须使用Java可以推断类型的少数地方。 :-) - Thomas Jung
1
@delive: 我提供的示例仍会创建一个空数组,但因为它是空的,所以您无法使用 EMPTY_ARRAY [0] - 这是尝试访问不存在的元素0... - Jon Skeet
1
@theyuv:最终这并不重要。如果你只需要在一个地方使用它,那就在那个类中声明它。如果你发现需要在更多的地方使用它,你总是可以将它移动到一个“工具”类中。 - Jon Skeet
显示剩余16条评论

27

String[] str = new String[0];?


20
String[] str = {};
但是。
return {};

由于缺少类型信息,这将无法正常工作。


12
return new String[] { };return new String[0]; 都可以工作。 - Bombe

15

我已经找到了答案,但还是想在 Stack Overflow 上“提问”一下。

String[] files = new String[0];
或者
int[] files = new int[0];


在你的问题中添加这样的评论...或选择其中一个回答,它们说了同样的事情。 - Jonathan Leffler
6
谢谢您的评论,乔纳森。正如您所看到的,我比其他人更早发布了这个答案(因此还没有答案可供选择)。我也不认为将答案添加到问题中会使问题更好。 - Ron Tuffin
@Ron Tuffin -> 于2009年11月3日7:49:10Z提问 -> 于2009年11月3日7:49:57Z回答。你居然不到一分钟就回答了自己的问题?真的吗? :) - The incredible Jan

3
你可以使用来自org.apache.commons.lang3的ArrayUtils.EMPTY_STRING_ARRAY。
import org.apache.commons.lang3.ArrayUtils;

    class Scratch {
        public static void main(String[] args) {
            String[] strings = ArrayUtils.EMPTY_STRING_ARRAY;
        }
    }

2
你可以使用以下内容 -
1. String[] str = new String[0];
2. String[] str = ArrayUtils.EMPTY_STRING_ARRAY;<br>

两者相同。


1
创建一个函数,它不会返回null,而是返回一个空数组。您可以查看下面的代码以了解更多。
    public static String[] getJavaFileNameList(File inputDir) {
    String[] files = inputDir.list(new FilenameFilter() {
        @Override
        public boolean accept(File current, String name) {
            return new File(current, name).isFile() && (name.endsWith("java"));
        }
    });

    return files == null ? new String[0] : files;
}

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