相关疑难解决方法(0)

不在声明中的数组初始化语法

我可以写:

AClass[] array = {object1, object2}
Run Code Online (Sandbox Code Playgroud)

我也可以写:

AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;
Run Code Online (Sandbox Code Playgroud)

但我不能写:

AClass[] array;
...
array = {object1, object2};
Run Code Online (Sandbox Code Playgroud)

为什么这会被Java阻止?

我知道如何解决它,但有时会更简单.

例如:

public void selectedPointsToMove(cpVect coord) {

    if (tab == null) {
        if (arePointsClose(coord, point1, 10)) {
            cpVect[] tempTab = {point1};
            tab = tempTab;
        } else if (arePointsClose(point2, coord, 10)) {
            cpVect[] tempTab = {point2};
            tab = tempTab;
        } else {
            cpVect[] tempTab = {point1,point2};
            tab = tempTab;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个简单的问题一直困扰着我,因为我学会了如何在Java中使用数组.

java arrays

139
推荐指数
3
解决办法
25万
查看次数

使用Arrays.asList初始化List <>

为什么这样做:

String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
Run Code Online (Sandbox Code Playgroud)

但这不是:

List<String> list = Arrays.asList({"a","b","c"});
Run Code Online (Sandbox Code Playgroud)

java arrays collections list array-initialization

40
推荐指数
3
解决办法
6万
查看次数

在声明以外的时间初始化C数组?

我知道在C中我可以做到以下几点.

int test[5] = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)

现在,这在声明数组时才合法.但是我想知道为什么以后这样做不合法?但是后来在该计划中,执行以下操作是不合法的.

test[5] = {10, 20, 30, 40, 50}; 
Run Code Online (Sandbox Code Playgroud)

或类似的东西.为什么是这样?我知道这不合法,我不是在抱怨,但有人可以给我一个更技术性的解释,说明为什么我不能这样做?(即不要只说C规范不允许它或类似的东西)

我假设它必须对内存在数组的堆栈上分配的时间做一些事情,所以在那一点C可以自动填充我的值,但那么为什么它不能在以后呢?

多谢你们

c arrays initialization

18
推荐指数
4
解决办法
2万
查看次数