-
[java] call by value vs call by referencejava 2023. 1. 16. 18:10
메소드에 값(primitive type)을 전달하는것 과 객체(reference type)을 전달하는 것에는 큰차이가 있다.
call by value : 메소드가 값을 받은 경우
value는 메소드 내부에서만 쓰인다. 즉 객체 내부 속성값이 copy된 복사본이다. 이는 본래객체의 속성값을 변경시키지 못함
변경시키고자한다면 return 값 을 해주어야함.
class Updator{ void update(int count){ count++; //값은 매개변수 내부에서만 쓰인다. } } class Counter{ int count =0; } public class Sample { public static void main(String[] args) { Counter myCounter = new Counter(); System.out.println(myCounter.count); //0 Updator myUpdator = new Updator(); myUpdator.update(myCounter.count); //value값을 매개변수 인자로 넣었다. System.out.println(myCounter.count);//0 } }call by reference : 메소드가 객체를 받은 경우
메소드의 입력으로 객체를 받은 경우는 메소드가 입력받은 객체를 그대로 사용함
메소드가 객체의 속성값을 변경하면 메소드 수행 후에도 객체의 변경된 속성값이 유지됨.
class Updator{ void update(Counter counter){ counter.count++; //객체를 전달받았기때문에 객체의 속성값을 변경할수있다. } } class Counter{ int count =0; } public class Sample { public static void main(String[] args) { Counter myCounter = new Counter(); System.out.println(myCounter.count); //0 Updator myUpdator = new Updator(); myUpdator.update(myCounter); //reference값을 매개변수 인자로 넣었다. System.out.println(myCounter.count);//1 } }'java' 카테고리의 다른 글
[java] 생성자(Constructor) (0) 2023.01.17 [java] 상속 (0) 2023.01.16 [java] 메소드 (0) 2023.01.16 [java] 클래스 (0) 2023.01.16 [java] 제어문(if,switch,while,for) (0) 2023.01.16