java - 非静态时变量初始化的问题

标签 java arrays initialization javac

我试图通过以下方式在非静态上下文中将数组加倍:

public class Test {
    int[] data=new int[1];

    public void Double(){
        if(data == null){
            int[] data=new int[1];
        }
        int[] data=new int[data.length*2];
    }

    public static void main(String[] args){
        Test table = new Test();
        table.data=new int[1];
    }
}

javac 不会编译它,因为它警告我

variable data might not have been initialized

即使它显然已经初始化,我该如何解决这个问题?

最佳答案

您在 Double() 方法中声明了一个本地 data 变量(实际上您正在声明两个这样的变量),这隐藏了具有相同名称的实例变量。

因此,在声明中:

int[] data=new int[data.length*2];

您正在初始化本地 data 变量之前访问 data.length

将其更改为:

public void Double(){
    if(data == null){
        data=new int[1];
    } else {
        data=new int[data.length*2];
    }
}

关于java - 非静态时变量初始化的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39815410/

相关文章:

c++ - 在其他函数中获取变量后创建数组

c++ - 如何静态初始化包含 union 的结构数组?

java - 如何扩展 Java 中的参数?

java - 为什么我的开关不起作用?

java - 如何 "save"我的程序?

java - 访问数组列表中的记录

php - 对 php 数组中的所有值求和

c - 我应该如何初始化 pthread 互斥量?

c++ - 如何使数组的派生类型接受聚合初始化?

java - 解密后消息开头的特殊字符