[Java] Call By Value, Call By Reference, Call By Name
Call By Value
매개변수 있는 메서드를 선언한다.
메서드를 호출할 때 매개 변수가 전달하는 값으로 실행한다.
public class CallByValue {
public static void call(int x, int y) {
for (int j = 0; j < x ; j++) {
// * 5개 반복한걸 j가 2까지 반복해 0~2(별 5개짜리가 3개)
for (int i = 0; i < y ; i++) {
// *을 0~4까지 반복해(별의 개수는 5개)
System.out.print("*");
}
System.out.println( );
// i의 for문이 끝나면 j for문으로 시작하기 전에 빈 줄을 넣어준다.
}
}
public static void main(String[] args) {
call(3,5);
// 매개변수 x와 y에 3, 5를 저장해서 call메서드를 실행한다.
}
}
Call By Reference
매개변수 있는 메서드를 선언한다.
메서드를 호출 할 때 매개변수의 주소를 참조하여 실행한다.
매개변수의 주소를 참조하므로 매개변수명이 같지 않아도 된다.
public class CallByReference {
public static void call(String name1) {
System.out.println(name1+"안녕하세요.");
System.out.println("name1의 주소 : "+ name1.hashCode()); // name1의 주소값 확인
}
public static void main(String[] args) {
String name2 = "홍길동님 ";// string으로 홍길동이라는 이름을 name2에 저장
call(name2);// call 메서드를 호출하며, 매개변수 name1에 name2의 값인 홍길동님을 넣어 call메서드를 실행한다.
System.out.println("name2의 주소 : "+ name2.hashCode());// name2를 넣은 주소값을 확인다.
}
}
// name1의 주소값과 , name2의 주소값이 같은 이유는 name2에 홍길동을 저장하고 name1에 저장했기 때문에 같은 값이 됨
// String타입은 new를 사용하지 않고 복사한다면, 같은 값을 받았을때 주소같이 같음
// new를 사용하지 않아야 같은 이유는 new를 사용해서 복사하면 인스턴스화 오브젝트라서 힙에 저장됨, 힙에서는 값이 같던 다르던 주소값은 달라짐
Call by Name
메개 변수가 없는 메서드를 선언한다.
메서드의 이름으로 호출되는 메서드로 특정 매개변수 없이 실행한다.
public class CallByName {
public static void call() {
// 매개변수가 없는 스테틱 메서드를 선언한다.
// 스트링은 new연산자로 복사하지 않은 경우 값이 같으면 주소값 같다.
System.out.println("여러분 ");
}
public static void main(String[] args) {
call();
// call 매서드의 이름인 call에 의해 호출되고 {}(코드블록) 에 있는 내용을 실행한다.
System.out.println("반갑습니다.");
}
}
댓글남기기