programing

선언에 없는 경우 어레이 초기화 구문

minecode 2022. 12. 30. 17:19
반응형

선언에 없는 경우 어레이 초기화 구문

쓸 수 있다:

AClass[] array = {object1, object2}

또, 다음과 같이 쓸 수 있습니다.

AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;

쓸 수 없어요.

AClass[] array;
...
array = {object1, object2};

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;
        }
    }
}

이 간단한 질문은 Java에서 어레이를 사용하는 방법을 배운 이후 계속 신경이 쓰입니다.

Java에 의해 차단되는 이유는 무엇입니까?

자바 디자이너에게 물어봐야 합니다.그 제한에는 미묘한 문법적 이유가 있을 수 있다.어레이 작성/초기화 구성 중 일부는 Java 1.0이 아니었고 (IRC)는 Java 1.1에 추가되었습니다.

하지만 "왜"는 중요하지 않다.거기에 제한이 있고, 당신은 그것을 감수해야 합니다.

어떻게 대처해야 할지 알지만, 가끔은 그게 더 간단할 거예요.

다음과 같이 쓸 수 있습니다.

AClass[] array;
...
array = new AClass[]{object1, object2};

그 이유에 대해 답변해 보겠습니다.Java 어레이는 ArrayList와 같은 보다 동적인 클래스에 비해 매우 단순하고 기본적인 것입니다.Java는 선언 시 어레이에 할당해야 하는 메모리 양을 알고 싶어 합니다.Array List는 훨씬 더 동적이고 크기가 시간에 따라 달라질 수 있습니다.

어레이를 2의 길이로 초기화하고 나중에 3의 길이가 필요한 경우 기존 어레이를 버리고 완전히 새로운 어레이를 생성해야 합니다.그래서 'new' 키워드입니다.

첫 번째 두 가지 예에서는 선언 시 할당해야 할 메모리 양을 알려 줍니다.세 번째 예에서는 어레이 이름이 아무것도 아닌 포인터가 되므로 초기화할 때 적절한 양의 메모리를 할당하기 위해 명시적으로 새 어레이를 생성해야 합니다.

첫 번째 예시는 (누군가 더 잘 알고 있다면 정정해 주십시오)

AClass[] array = {object1, object2}

실제로 의미하는 것은

AClass[] array = new AClass[]{object1, object2};

그러나 Java 디자이너가 한 일은 선언 시 어레이를 생성하면 더 빨리 쓸 수 있도록 하는 것이었습니다.

권장되는 회피책이 좋습니다.실행 시 시간 또는 메모리 사용량이 중요한 경우 어레이를 사용합니다.중요하지 않고 알기 쉽고 사용하기 쉬운 코드를 원하는 경우 Array List를 사용합니다.

왜 그런지는 대답할 수 없어요.

하지만 역동적인 것을 원한다면 Collection Array List를 고려해 보는 것은 어떨까요?

Array List는 모든 개체 유형일 수 있습니다.

또, 강제적으로 어레이로서 사용하고 싶은 경우는, toArray() 메서드를 사용할 수 있습니다.

예를 들어 다음과 같습니다.

            ArrayList<String> al = new ArrayList<String>();
            al.add("one");
            al.add("two");
            String[] strArray = (String[]) al.toArray(new String[0]);

이게 도움이 됐으면 좋겠어요.

것을 을 위해new AClass[] { ... } 여기설탕이 .

public AClass[] c(AClass... arr) { return arr; }

이 작은 기능을 원하는 대로 사용할 수 있습니다.

AClass[] array;
...
array = c(object1, object2);

언급URL : https://stackoverflow.com/questions/5387643/array-initialization-syntax-when-not-in-a-declaration

반응형