인자전달방식
1.값 호출(call by value): 메서드를 호출시 기본자료형의 값을 인자로 전달하는 방식
2.참조 호출(call by reference): 메서드 호출시 전달하려는 인자를 참조(객체) 자료형을 사용할 경우를 의미. 여기에는 기본 자로형이 아닌 일반 객체 또는 배열들이 여기에 속함.
~~~~~~~~~~~~~~~~~~~~
//call by value: 값이 전달(int,short,double 등)
//call by reference: 주소가 전달 (배열, 클래스)
class Test1{
String name="lee";
String addr="Seoul";
}
public class CallByEx8 {
//1.call by value: 값만 전달받으며 메인의 a와 여기의 n은 주소가 다름
public static void changeInt(int n) {
System.out.println("전달받은 정수값"+n);
n=20;
}
//2.call by reference: 배열은 객체로 인식,주소로 전달, 여기서 전달하면
//지금은 메인에서 배열값도 같이 변경
public static void changeArray(int [] arr) {
System.out.println("전달받은 배열 출력");
for(int a:arr)
System.out.println(a);
arr[2]=90;
}
//3.클래스..call by reference
public static void changeTest(Test1 t1) {
System.out.println("전달받은 Test1객체 출력");
System.out.println(t1.name+","+t1.addr);
//값변경해보기
t1.name="박나래";
t1.addr="인천시";
}
//4.string객체.. 전달은 되는지? 변경은 되는지?
public static void changeString(String str) {
System.out.println("전달받은 문자열: "+str);
}
public static void main(String[] args) {
//1.call by value
int a=50;
changeInt(a); //값만 전달
System.out.println("a의 값은 바뀔까?"+a);
//2.call by reference
int[]arr2= {10,20,70};
changeArray(arr2);
System.out.println("메서드 호출후 배열값 확인");
for(int ar:arr2)
System.out.println(ar); //2번지 값이 변경됨
//3.
Test1 t1=new Test1();
changeTest(t1);
System.out.println(t1.name+","+t1.addr); //값 변경됨
//4.
String str="Nice";
changeString(str);
System.out.println("문자열 변경확인: "+str);
//string은 객체이지만 값은 전달되지만 변경은 불가능
//결과
전달받은 정수값50
a의 값은 바뀔까?50
전달받은 배열 출력
10
20
70
메서드 호출후 배열값 확인
10
20
90
전달받은 Test1객체 출력
lee,Seoul
박나래,인천시
전달받은 문자열: Nice
문자열 변경확인: Nice
'JAVA' 카테고리의 다른 글
210813_메서드 (0) | 2021.08.13 |
---|---|
210813_오버로딩 (0) | 2021.08.13 |
210812_클래스+배열 (0) | 2021.08.12 |
210812_클래스+계산(예제) (0) | 2021.08.12 |
210812_클래스(예제) (0) | 2021.08.12 |