
드디어 배열을 들어갈 차례다
이것도 알다가도 까먹는 것들이 많다 하지만 내용도 중요하지만 적용방법에 집중하는 것이 좋다!
동일한 자료형만묶어서 저장 가능 → 반대로 어떤 타입인지 알아야함
생성시 크기를 지정(지정 후에는 변경 불가)
선언 : 자료형[ ] 변수명 or 자료형 변수명 [ ] *왼쪽타입 추천
null은 참조변수 값의 초기값(가리키는 객체가 없다는 것)
→ 참조자료형의 실제 값은 heap에 저장한다 하지만 값이 없다면 stack에 null로 표현한다(stack은 빈칸으로 존재O, 힙메모리는 빈칸존재X)
강제초기값 참고
: 여러개의 값을 저장 할수 있는 공간을 생성 + 힙메모리에 생성(진짜값)
int [ ] a;
a = new int [3]; // new 자료형[ 배열의 길이 ]
// new는 힙 메모리에 넣어라의 의미
//자료형 [배열의 길이]는 int 3개를 저장할 수 있는 방3개를 만들어달라
자바완전정복 영상중..
a [0] : a가 가리키는 곳에 0번째 방(index)을 보라는 의미여러가지 배열 객체 생성 및 값 대입
참조변수명 [ 인덱스번호 ]
a [0] =3; : a가 가리키는 곳에 0번째 방(index)을 보면 3이 있다 *실제값은 3
방법 1 : 배열 객체 생성 + 값 대입
자료형 [] 참조변수명 = new 자료형 [배열의 길이];
참조변수명[0] = 값;
참조변수명[1] = 값;
...
참조변수명[배열의 길이 -1] = 값
//0번째부터 인덱스 나열하므로! -1
int [] a = new int[3];
//첫번째줄부터 힙에는 값이 0으로 설정된다(강제초기화)
a[0] = 3;
a[1] = 4;
a[2] = 5;
방법 2: 배열 객체의 생성 및 값 대입
자료형 [] 참조변수명 = new 자료형[] {값1,값2,값3,...값};
//new 자료형[]에서 배열의 길이를 작성하지 않는다
//배열의 길이를 {값,값...값}으로 개수 표현하기 때문이다
int [] a = new int[]{3,4,5}; //방법1의 0으로설정이 생략된다
방법 3: 대입할 값만 입력
자료형 [] 참조변수명 = {값1,값2,값3,...값};
// new 자료형[] 생략
int[] a = {3,4,5};
//좌변으로 자료형 파악, 참조자료형으로 힙에 저장하므로 생략하게 됨
*방법 1 vs 방법 2 vs 방법 3
방법 1은 배열의 값을 미리 알고 있을 수 없는 경우에 유리
방법 2는 배열의 값을 이미 알고 있는 경우 + 분리 작성에 유리
선언과 값 대입 분리O int[] a; a = new int[]{3,4,5};
방법 3은 분리XX int[] a;a = {3,4,5};//말이 안된다.
선언 시에는 int[] a; stack 영역에 a 공간이 비워져 있고
값을 대입 시에는 a = new int[3]; stack a 공간에 참조(주소값)가 되고 heap영역에 3개의 배열 내(방)에 0의 값이 들어간다
정리하자면,,
stack에서의 초기값
빈칸으로 존재 가능하지만 변수는 무조건 Stack에 들어가므로 출력시에는 문제가 발생->참조만 지정이 되었기 때문이다
int a[];// stack에 아무값도 없음
System.out.println(a); //오류발생
heap에서의 초기값
빈칸으로 존재 불가하고 초기값이 강제로 설정되기 때문에 출력 가능->실제 값이 디폴트값으로 주어졌기 때문이다
숫자 기본자료형 : 디폴트값 0
boolean: 디폴트 값 false
참조자료형 : 디폴트 값 null
String[] a = new String[3];//힙의 3개 방 안에 String의 디폴트값으로 null이 입력 된다
`System.out.println(a);// 오류 안 남
```
int a = 3;
int b = a;
b = 7;
System.out.println(a); //3
System.out.println(b); //7: 처음에 3으로 stack에 직접 값이 입력 되었지만 7로 바뀌었다int[] a = {3, 4, 5};
int[] b = a; //a와b는 같은 객체를 가리킨다
b[0] = 7; //a[0] = b[0]
System.out.println(a[0]); //7
System.out.println(b[0]; //7: 처음에 3으로 heap에 직접 값이 입력 되었지만 b[0] 선언으로 a의 0번째도 7로 바뀌었다배열참조변수명.length
int[] a = new int[]{1,2,3,4,5};
System.out.println(a.length); //5(개)
a. 의 의미는 a가 가리키는 곳으로 이동 (즉, 참조자료형만 가능)
int[] a = new int[100];
a[0]=1 .... a[99]=100;
for(int i=0; i<a.length; i++){
System.out.println(a[i]);
}
// i초기값 0이고 a.length(100개)보다 작으면 true, +1씩 증가.
//값이 1~100까지 나온다
for( 원소자료형 변수 : 묶음 참조자료형 ) { }원소 자료형변수 : 집합 원소의 변수
묶음 참조자료형 : 배열, 컬렉션 등
int[] a = new int[100];
a[0]=1 .... a[99]=100;
for(int k: a){
System.out.println(k);
}
//여러개인 a원소들을 k로 변환
//조건식에서 int k는 a의 개별 원소를 하나씩 받을 수 있는 그릇(집합개념과 유사하다)
System.out,println(Arrays.toString(new int[1,2,3]));