【问题标题】:How can I initialize a String array with length 0 in Java?如何在 Java 中初始化长度为 0 的字符串数组?
【发布时间】:2010-12-12 13:22:41
【问题描述】:

该方法的 Java 文档
String[] java.io.File.list(FilenameFilter filter)
在退货说明中包含此内容:

如果目录为空或过滤器不接受任何名称,则数组将为空。

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

【问题讨论】:

  • 我刚刚意识到这是一个愚蠢的问题 :( 因为这些数组的初始化方式与任何其他数组的初始化方式完全相同,只是大小为 0。显示了我现在初始化数组的频率。我会离开问题(不是删除它)因为有一天其他人可能和我一样愚蠢:)
  • 我对长度为 0 的数组有什么用例以及在这种特殊情况下为什么不简单地初始化到 null 感到困惑。

标签: java arrays initialization


【解决方案1】:

正如其他人所说,

new String[0]

确实会创建一个空数组。然而,数组有一个好处——它们的大小不能改变,所以你总是可以使用相同的空数组引用。所以在你的代码中,你可以使用:

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

然后在每次需要时返回 EMPTY_ARRAY - 无需每次都创建新对象。

【讨论】:

  • 看来大家都喜欢打字:private static final String[] EMPTY_ARRAY = {};
  • @Thomas:我同意你的观点,但对于这种特殊情况,我更喜欢更明确的形式。对我来说更清楚的是,它的意思是“我想要一个包含 0 个元素的字符串数组”,而不是“我想要一个包含这个内容的数组——它是空的”。我猜只是个人喜好。
  • @Tony - 我必须使用 Java 可以推断类型的少数几个地方。 :-)
  • @delive:我提供的示例仍然会创建一个空数组,但是因为它是空的,所以您不能使用EMPTY_ARRAY[0] - 这是试图访问不存在的元素 0 ...
  • @theyuv:最终这并不重要。如果您只在一个地方需要它,请在该类中声明它。如果您发现在更多地方需要它,您可以随时将其移至“实用程序”类。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    String[] str = {};
    

    但是

    return {};
    

    由于缺少类型信息而无法使用。

    【讨论】:

    • return new String[] { };return new String[0]; 都可以。
    【解决方案4】:

    好的,我实际上找到了答案,但我认为无论如何我都会将问题“导入”到 SO 中

    String[] files = new String[0];

    int[] files = new int[0];

    【讨论】:

    • 在您的问题中添加此类评论...或选择其中一个具有相同含义的答案。
    • 感谢乔纳森的评论。正如您可能已经注意到的那样,我在其他人之前发布了这个答案(因此没有答案可供选择)。我也看不出将答案添加到问题中会产生更好的问题。
    • @Ron Tuffin -> 2009 年 11 月 3 日 7:49:10Z 提问 -> 2009 年 11 月 3 日 7:49:57Z 回答了您甚至没有花一分钟时间回答自己的问题题?真的吗? :)
    【解决方案5】:

    您可以使用 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;
            }
        }
    

    【讨论】:

      【解决方案6】:

      创建一个不会返回 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;
      }
      

      【讨论】:

        【解决方案7】:

        你可以使用以下东西-

        1. String[] str = new String[0];
        2. String[] str = ArrayUtils.EMPTY_STRING_ARRAY;<br>
        

        两者都是一样的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 2014-10-16
          • 1970-01-01
          • 2013-03-15
          • 2021-12-30
          • 2016-05-03
          相关资源
          最近更新 更多