JAVA

210812_call by

요옫 2021. 8. 12. 16:40

인자전달방식

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