【问题标题】:difference between new String[]{} and new String[] in javajava中new String[]{}和new String[]的区别
【发布时间】:2013-12-05 09:30:33
【问题描述】:

我在java中更新鲜,我对java有疑问 那是

String array= new String[]{};
  1. { } 在这里有什么用?
  2. String array=new String[];String array=new String[]{};有什么区别
  3. 当我写String array=new String[10]{}; 时出现错误,为什么? 帮帮我,我很困惑。

【问题讨论】:

  • String[] array= new String[]{};
  • 阅读本教程。这可以帮助您了解 String 数组以及如何初始化。 alvinalexander.com/java/…

标签: java arrays string


【解决方案1】:

{} 定义数组的内容,在本例中为空。它们都有一个包含三个 Strings 的数组

String[] array = {"element1","element2","element3"};
String[] array = new String[] {"element1","element2","element3"};

while [] 在语句的表达式侧(= 的右侧)定义预期数组的大小,例如这将有一个包含 10 个位置的数组来放置 Strings

String[] array = new String[10];

...但是...

String array = new String[10]{};  //The line you mentioned above

错了,因为您定义了一个长度为 10 的数组 ([10]),然后定义了一个长度为 0 的数组 ({}),并试图将它们设置为相同的数组引用 (array)陈述。两者都不能设置。

另外

该数组应在语句开头定义为给定类型的数组,例如String[] arrayString array = /* array value*/ 是说,将数组值设置为String,而不是Strings 的数组。

【讨论】:

    【解决方案2】:

    String array=new String[];String array=new String[]{}; 在 java 中都是无效语句。

    它会给你一个错误,你试图将String array 分配给String 数据类型。 更具体地说,错误是这样的Type mismatch: cannot convert from String[] to String

    【讨论】:

    • 为什么这个答案被否决了?我可以知道原因吗?
    • 不仅你的答案,而且所有的答案都被否决了。+1 我这边
    • 其他人的回答都不对。但我的是。这就是我问的原因。其他人说这两种初始化没有区别,这是错误的。
    • @VimalBera 看起来您可能被否决了,因为主要问题在第 1 部分和第 2 部分,即使用花括号的区别以及实际使用花括号的方式。您确实回答了第 3 部分,这确实是一个单独的问题。只需对原始问题进行编辑即可解决此问题。 (只是我的看法。)
    • @JoeGruberman 是的,你是对的。很久以前就给出了答案,为我辩护,我会说;我是 2013 年的 SO 初学者,因此可能跳过了问题的整个不同部分。但我并不是说不要对我的答案投反对票,但如果你对它投反对票,请告诉我原因,以便我改进。干杯:)
    【解决方案3】:

    当您创建一个对象数组(而不是原始数组)时,您可以选择。

    一种选择是为数组指定一个大小,在这种情况下,它将只包含许多空值。

    String[] array = new String[10]; // Array of size 10, filled with nulls.
    

    另一个选项是指定数组中的内容。

    String[] array = new String[] {"Larry", "Curly", "Moe"};  // Array of size 3, filled with stooges.
    

    但是你不能混合使用这两种语法。任选其一。

    【讨论】:

    • 如果我有一些想要分配给数组的元素,但又想让数组的大小大于这个值,我该怎么办(因为我将来可能会插入更多元素)。
    【解决方案4】:

    TL;DR

    • 必须键入数组变量T[]
      (注意 T 本身可以是一个数组类型 -> 多维数组)
    • 数组的长度必须由以下任一方式确定:
      • 给它一个明确的大小
        (可以是int 常量或int 表达式,见下文n
      • 初始化数组中的所有值
        (长度是根据给定元素隐式计算的)
    • 键入T[] 的任何变量都有一个只读字段:length 和一个索引运算符[int],用于在某些索引处读取/写入数据。

    回复

    1。 String[] array= new String[]{};这里的{}有什么用?

    它使用{ } 之间的值初始化数组。在本例中为 0 个元素,因此 array.length == 0array[0] throws IndexOutOfBoundsException: 0

    2。 String array=new String[];String array=new String[]{}; 之间的区别是什么

    第一个由于两个原因无法编译,而第二个由于一个原因无法编译。常见的原因是变量数组的类型必须是数组类型:String[] 而不仅仅是String。忽略这一点(可能只是一个错字)的区别是:

    new String[]   // size not known, compile error
    new String[]{} // size is known, it has 0 elements, listed inside {}
    new String[0]  // size is known, it has 0 elements, explicitly sized
    

    3。当我写String array=new String[10]{}; 时出现错误,为什么?

    (同样,在array 之前忽略缺少的[])在这种情况下,您过于急于告诉Java 做什么并且您提供了相互冲突的数据。首先,您告诉 Java 您希望数组包含 10 个元素,然后您通过{} 说您希望数组为空。 只需下定决心并使用其中之一 - Java 认为。

    帮帮我,我很困惑

    示例

    String[] noStrings = new String[0];
    String[] noStrings = new String[] { };
    String[] oneString = new String[] { "atIndex0" };
    String[] oneString = new String[1];
    String[] oneString = new String[] { null }; // same as previous
    String[] threeStrings = new String[] { "atIndex0", "atIndex1", "atIndex2" };
    String[] threeStrings = new String[] { "atIndex0", null, "atIndex2" }; // you can skip an index
    String[] threeStrings = new String[3];
    String[] threeStrings = new String[] { null, null, null }; // same as previous
    int[] twoNumbers = new int[2];
    int[] twoNumbers = new int[] { 0, 0 }; // same as above
    int[] twoNumbers = new int[] { 1, 2 }; // twoNumbers.length == 2 && twoNumbers[0] == 1 && twoNumbers[1] == 2
    int n = 2;
    int[] nNumbers = new int[n]; // same as [2] and { 0, 0 }
    int[] nNumbers = new int[2*n]; // same as new int[4] if n == 2
    

    (这里,“same as”表示构造相同的数组。)

    【讨论】:

      【解决方案5】:

      试试这个。

        String[] array1= new String[]{};
        System.out.println(array1.length);
        String[] array2= new String[0];
        System.out.println(array2.length);
      

      注意:new String[]{};之间没有字节码区别和新字符串[0];

      new String[]{} 是带值的数组初始化。

      new String[0];是数组声明(只分配内存)

      new String[10]{}; 不允许,因为new String[10]{ may be here 100 values};

      【讨论】:

        【解决方案6】:
        String array[]=new String[]; and String array[]=new String[]{};
        

        没有区别,只是声明数组的方式不同

        字符串数组=新字符串[10]{};为什么会出错?

        这是因为你不能用这种格式声明数组的大小。

        正确的方法是

        String array[]=new String[]{"a","b"};
        

        【讨论】:

        • @boosshuru 您对我的回答不满意吗?如果您有任何疑问,请随时提问
        【解决方案7】:

        1. {} 的使用:

        它使用值 { }

        初始化数组

        2.String array=new String[];的区别和 String array=new String[]{};

        字符串数组=新字符串[];和字符串数组=新字符串[]{};两者都是 java中的无效语句。

        它会给你一个错误,你试图分配字符串数组 为字符串数据类型。更具体地说,错误就像这种类型 不匹配:无法从 String[] 转换为 String

        3.String 数组=new String[10]{};为什么会出错?

        错误,因为您定义了一个长度为 10 ([10]) 的数组,然后 定义长度为 String[10]{} 0

        的数组

        【讨论】:

          猜你喜欢
          • 2020-11-13
          • 2018-10-09
          • 2013-10-20
          • 2015-12-07
          • 1970-01-01
          • 2012-12-29
          • 2014-07-22
          • 2017-05-08
          • 2019-11-12
          相关资源
          最近更新 更多