public class Sample {
int sum(**int a, int b**) { // a, b 는 **매개변수**
return a+b;
}
public static void main(String[] args) {
Sample sample = new Sample();
int c = sample.sum(**3, 4**); // 3, 4는 **인수**
System.out.println(c); // 7 출력
}
}
double 배열값을 복사하고 나머지 공간은 0.0 char 배열값을 복사하고 나머지 공간은 공백 String 배열값을 복사하고 나머지 공간은 null
System.arraycopy()의 형태
System.arraycopy(src, srcPos, dest, destPos, length);
// src : 원본 배열
// srcPos : 포지션. 원본배열에서 복사를 시작할 위치
// dest : 복사 배열
// destpos: 복사 배열에서 붙여놓기를 시작할 위치
// length : 얼만큼 복사를 해올지에 대한 복사 길이
자료형[] 배열명; // 자바식. 대부분 이쪽 사용
자료형 배열명[]; // C언어식.
int[] arr;
배열은 선언만해서는 쓸 수 없고 할당까지 해야함
배열은 기본자료형이 아니며 참조자료형처럼 사용
구조가 참조자료형처럼 되어있어 주소값을 갖는다
기본형, 참조형 구분 기준 : call by value & call by reference
즉, 주소값을 가져오느냐 값 자체를 그대로 복사해서 가져오느냐
* Stack 영역에 공간 생성
배열 할당
heap 메모리 영역에 공간을 생성하는 것
(변수의 선언 : stack에 공간 차지)
자료형[] 배열명 = new 배열명[배열길이]
자료형 배열명[] = new 자료형[배열길이]
메모리 영역에 공간을 생성해주는 역할을 new 연산자가 실행
new 연산자가 배열 할당하는 역할+heap영역에 생성된 공간에 대한 주소값을 발생시킴
배열의 크기 변경 가능할까?
배열은 크기 변경 불가
새로운 배열을 만들고 바꿔치기하거라 주소값이 바뀐다(0x100→0x200)
System.out.print("새로 할당할 배열의 길이 입력 : ");
int size = sc.nextInt();
double[] dArr = new double[size];
System.out.println("dArr의 길이 : "+dArr.length);
System.out.println("dArr의 주소값 : "+ dArr); // [D@74a14482
dArr = new double[5];
System.out.println("변경 후 dArr의 길이 : " + dArr.length);// 배열 길이 변경 가능
System.out.println("변경 후 dArr의 주소값 : " + dArr); // but 길이 변경 후 주소값 달라짐 [D@1540e19d
System.out.println(); //
// 주소값하면 new 연산자가 떠올라야.
// dArr[30]에서 new연산자가 쓰이면서 새로운 공간생성과 함께 주소값 생성하기에 주소값이 달라짐
그래서 주소값이 바뀌는 것(0x100→0x200)
기존 배열 유지x
new연산자에 의해 heap영역에 새로운 배열의 공간이 생성되고 그에 따라 stack에 있는 변수명 dArr의 참조 변수값(주소값)도 0x100→0x200 바뀜
new 연산자 역할
1)배열 할당 : heap 메모리 영역에 공간 생성
2)heap 영역에 생성된 공간에 대한 주소값 생성
-배열 한칸이 아닌 배열 한덩이 전체에 대한 주소값
ex)주소값 0x100
heap이 컴퓨터와 사용자가 같이 사용하는 공간인 것
배열명에 담긴게 heap메모리 영역에 생성된 주소값을 담은 것
주소를 통해서 실제 데이터를 가리키는 것이다.
배열 초기화
1)인덱스 이용
중괄호{}를 이용
for문 이용
1)인덱스 이용
배열명[인덱스] 값;
ex)
int[] iArr = new int[3];
iArr[0] = 1;
iArr[1] = 2;
iArr[2] = 3;
iArr[3] = 4; // error : 배열이 3칸 할당됬는데 없는 4칸째에 값을 할당하려해서
2) 중괄호{} 이용
자료형[] 배열명 = {값,값};
ex)
int[] arr = {1,2,3,4}; // 값 수에 따라 알아서 배열 칸 지정하고 생성함
public void method02() {
Scanner sc =new Scanner(System.in);
System.out.print("정수 하나 입력 : ");
int num = sc.nextInt();
int sum = 0;
for(int i = 1; ; i++) {
sum += i;
if(i == num) {
break;
}
}
System.out.println("1부터" +num +"까지의 합은" +sum +"입니다.");
}
2)continue
실행하다가 처음으로 가서 다시 반복하게하는 역할
public void method03() {
// 1부터 100까지 정수들을 전부 합산
// 이떄, 4의배수는 빼고 계산
int i = 0;
int sum = 0;
// 1) continue 없이
for(i = 1; i <= 100; i++ ) {
if(i%4 != 0) {
sum +=i;
}
sum += i;
}
// 2) continue문
for(i = 1; i <= 100; i++ ) {
if(i % 4 == 0 ) {// 4의배수일 떄만 true되서 건너뜀
continue; // 밑에 코드는 안돌아감. 바로 i++로
}
sum += i;
}
}
// 1부터 10 사이의 임의의 난수를 정해 1부터 난수까지의 정수 합계 (난수 임의의 숫자)
int random = (int)(Math.random() * 10 + 1);
int sum = 0; // 변수 초기화
for(int i=1; i<=random; i++) {
sum = sum + i;
// sum += i; 위와 같은 코드
}
System.out.println("1부터 "+random+"까지의 정수합계 : "+sum);