1 차원 배열 을 만 드 는 몇 가지 방법

7674 단어 JavaSE
배열 은 모든 언어 학습 에서 가장 기본 적 인 데이터 구조 중 하나 라 고 할 수 있 습 니 다. 거의 모든 항목 에서 배열 의 사용 과 관련 됩 니 다. 다음은 배열 의 성명, 생 성 과 초기 화, 인 스 턴 스 코드 분석 을 상세 하 게 소개 하고 자바 언어 로 설명 합 니 다.
성명
         []
 
    []      //     

이 부분 에서 볼 때 두 가지 성명 방식 의 효 과 는 같 지만 첫 번 째 방법 으로 성명 하 는 것 을 추천 합 니 다. 첫 번 째 방법 은 더욱 직관 적 이 고 가 독성 이 있 기 때문에 성명 을 통 해 일반적인 데이터 유형 이 아니 라 인용 유형 임 을 알 수 있 습 니 다. 구체 적 인 정형 배열 성명 은 다음 과 같 습 니 다.
  int   
int[]  arrNum;
int arrNum[];

여기 서 의 이름 은 개인의 취향 을 볼 때 어쨌든 자신의 규범 이 있어 야 합 니 다. 저 는 개인 적 으로 접두사 arr 를 추가 합 니 다. 또한 주의해 야 할 것 은 자바 언어 에서 배열 을 설명 할 때 그 길 이 를 지정 할 수 없습니다. 배열 은 인용 형 변수 이기 때 문 입 니 다. 즉, 배열 이 정의 할 때 실질 적 으로 인용 변수 (또는 지침) 를 정의 한 것 입 니 다.이 때 이 인용 변 수 는 유효한 메모 리 를 가리 키 지 않 았 고 메모리 에 메모리 공간 이 열 리 지 않 아 길 이 를 지정 할 수 없습니다. 오류 정의
//int[5] arrNum;
//int arrNum[5];

그렇다면 이때 C + + 를 배 운 적 이 있 는 사람 은 왜 C + + 에서 배열 을 이렇게 정의 하 는 것 이 합 법 적 이 냐 고 물 을 수 있 습 니 다.그리고 이렇게 정 의 된 후에 사용 할 수 있 는데 자바 는 만 들 고 초기 화 한 후에 사용 할 수 있 습 니까?C 와 C + + 의 배열 은 메모리 블록 이기 때문에 자바 에서 안전성 을 고려 하여 정 의 된 배열 은 대상 이 고 배열 은 대상 자체 가 아니 라 대상 의 참조 일 뿐 자바 의 대상 은 쌓 여 있 기 때문에 배열 은 원본 형식 이 든 다른 대상 유형 이 든 배열 대상 자체 가 쌓 여 있 습 니 다.
창설
자바 는 new 키 워드 를 사용 하여 배열 을 만 듭 니 다. 배열 생 성 이 초기 화 되 지 않 았 다 면 배열 의 크기 를 지정 해 야 합 니 다.
arrNum = new int[5];//  
arrNum = new int[]{0,1,2,3,4};//  
//arrNum = new int[];//  ,             

사례 1:
public class ArrayDemo {
    public static void main(String []args){
        int [] arrNum;
        int [] arrNum1;
        int [] arrNum2 = new int[5];
        arrNum = new int[5];
        arrNum1 = new int[]{1,2,3,4,5};
        System.out.println(arrNum[0]);
        System.out.println(arrNum1[0]);
        System.out.println(arrNum2[0]);
    }
}

이 세 가지 방법 을 볼 수 있 습 니 다. 배열 을 만 드 는 것 이 모두 정확 합 니 다.
초기 화
사실은 위의 사례 에서 배열 의 초기 화 와 관련 되 었 습 니 다. 배열 의 초기 화 는 정적 초기 화, 동적 초기 화 와 기본 초기 화 동적 초기 화 로 나 뉘 는데 이것 은 바로 생 성 과정 에서 배열 의 크기 만 설명 하고 시스템 에서 배열 의 값 을 분배 하 는 것 입 니 다.
int [] arrNum;
arrNum = new int[5];
int [] arrNum = new int[5];//    

정적 초기 화 는 프로그래머 가 모든 배열 요 소 를 명시 적 으로 지정 하 는 값 입 니 다.
int [] arrNum1;
arrNum1 = new int[]{1,2,3,4,5};
int[] arrNum1 = {1,2,3,4,5};//    

여기 서 정적 초기 화 방식 에 대해 서 는 첫 번 째 방식 을 추천 하 며 간략화 방식 을 추천 하지 않 습 니 다.
스 택 분석
상기 배열 을 만 드 는 방식 은 모두 두 가지 방식 입 니 다. 방식 1:
int[] arrNum;
arrNum = new int[5]; 

이런 방식 에 대해 실질 적 으로 첫 번 째 문장 은 인용 대상 을 만 드 는 것 이다. 창고 메모리 에 대상 을 열 었 다 고 볼 수 있 고 이 대상 을 위해 빈 바늘 을 만 들 었 다. 이때 두 번 째 문장 이 없 으 면 컴 파 일 러 가 잘못된 방향 을 가리 키 는 이상 을 알 릴 수 있다. 두 번 째 문장의 역할 은 메모리 에 크기 가 5 인 메모리 공간 을 만 드 는 방식 이다. 두 번 째 문장 은 다음 과 같다.
int[] arrNum = new int[5];

실제로 이런 방법 은 첫 번 째 단 계 를 줄 이 는 것 이 고, 대상 을 창고 에서 개척 하 는 과정 을 하나의 과정 으로 합 친 것 이 라 고 할 수 있다.
인용 전달
앞에서 배열 이 실제 적 으로 인용 유형 이 라 고 언급 한 이상 배열 은 반드시 인용 전달 이 발생 할 수 있 습 니 다. 인용 전달 이 무엇 입 니까?실질 적 으로 같은 메모리 공간 이 서로 다른 스 택 공간 에 접근 할 수 있다 는 것 입 니 다. 그러면 배열 의 인용 전달 은 어떻게 이 루어 집 니까?사례 2:
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arrNum;
        arrNum = new int[]{1, 2, 3, 4, 5};
        int[] temp = arrNum;
        temp[0] = 10;
        for (int i = 0;i < arrNum.length; i++){
            System.out.println(arrNum[i]);
        }
    }
}
  :
10
2
3
4
5

Process finished with exit code 0

이때 구문 int[] temp = arrNum; 에 대해 서 는 temp 배열 을 스 택 메모리 공간 에서 열 어 놓 은 주 소 를 data 배열 과 같은 메모리 주 소 를 가리 키 는 것 을 실 행 했 습 니 다. 이때 temp [0] 의 값 을 바 꾸 는 것 은 실질 적 으로 arNum [0] 의 값 을 동시에 바 꾸 었 습 니 다.
총결산
이상 은 배열 의 관련 조작 을 상세 하 게 배 웠 습 니 다. 그러나 이것 은 데이터 의 바 텀 디자인 을 파악 하기 위해 서 입 니 다. 실제 작업 에서 동태 적 이 든 정태 적 인 방법 이 든 사용 하지 않 습 니 다. 배열 의 가장 큰 단점 은 배열 의 길이 가 바 뀌 지 않 는 다 는 것 입 니 다.실제 과정 에서 일반적으로 값 을 전달 하거나 다른 방식 으로 동적 으로 배열 을 생 성 하 는 것 이지 배열 의 크기 를 미리 지정 하 는 것 이 아니다.
자바 가 배열 을 만 드 는 몇 가지 방식 으로 배열 이 C + 자바 에서 의 차이 점

좋은 웹페이지 즐겨찾기