【问题标题】:Java declare array outside variable definitionJava 在变量定义之外声明数组
【发布时间】:2023-12-28 19:35:01
【问题描述】:

我正在寻找一种在 java 数组的声明之外直接为数组赋值的方法,例如

/*this works*/
int a[] = {1,2,3};

/*this doesn't*/
a = {1,2,3};

动机是这样使用以数组作为参数的方法

public void f(int a[]) {
 /*do stuff*/
}

f({1,2,3});

而不是

int a[] = {1,2,3};
f(a);

【问题讨论】:

  • 你的意思是文字数组吗?这似乎与静态无关
  • 是的,“文字数组”是我想要的术语。我不知道正确的名字

标签: java arrays declaration


【解决方案1】:

试试:

a = new int[] {1,2,3};

【讨论】:

    【解决方案2】:

    试试:

    a = new int[]{1,2,3};
    

    【讨论】:

    • 我通过我的小写 t 声明我的个性
    • 以及 ']' 和 '{' 之间没有空格。我会允许我们的分歧。
    【解决方案3】:

    一般你可以说

    int[] a;
    a = new int[]{1,2,3};
    

     

    public void f(int a[]) { ... }
    
    f(new int[]{1,2,3})
    

    在代码中的任意位置初始化数组。

    【讨论】:

      【解决方案4】:

      作为更简洁的替代方案,您可以使用可变参数功能,这仍然适用于传入数组 - 它只是语法糖。

      public void f(int... a) {
          /*do stuff*/
      }
      
      public void test() {
          f(1);
          f(1,2,3);
          f(new int[]{1,2,3});
      }
      

      【讨论】:

        【解决方案5】:

        您可以使用静态块来执行您要查找的操作。请记住,这是在第一次加载类时执行的。

        private static int a[];
        
        static {
            a = new int[] {1,2,3};
            f(new int[]{1,2,3}); 
        }
        
        public static void f(int a[]) {
         ///
        }
        

        【讨论】:

        • 根据回复,您似乎要求声明一个数组而不是“静态”数组。
        • “是的。我误用了静态这个词”——你能告诉我们静态和参考之间的区别吗? public void f(int a[]) 在方法调用时为您提供实际数组,然后您可以将其用作实际数组。