글
package com.example.call;
/*
* Call by Value and Call by Reference In Java.
* 자바 호출에는 값을 호출할 순 있지만 참조객체를 직접 호출할 수는 없다.
* 이게 무슨말이고하면!
* 값을 전달하는 메소드를 호출한면, 값호출(Call Of Value)을 수행한것이고,
* 호출된 메소드에서 변경된 값은 적용되지가않는다.
* 무슨 말인지 살짝 모호할텐데, 예제를 보자
*/
public class Operation {
int data = 50; // field
void change(int data) { // method
data = data + 100;
// this.data = data + 100 이 아니다.
// 오해하지말
// 메소드 내부의 변수 값은 변하지않고, 오직 로컬변수의 변경될 수 있다.
// 호출된 메소드의 파라미터인 data를 넘겨받아 그 값에 100을 더하여 초기화하는데
// 지켜볼건 이렇게해서 data가 가지고있는값이 바뀌느냐?
}
public static void main(String args[]) {
Operation op = new Operation();
// 객체를 만들어주자.
System.out.println("before change " + op.data);
// 변경전
op.change(500);
// 파라미터를 통해 필드값 50을 무시하고 값을 집어넣었을
System.out.println("after change " + op.data);
op.data = 99; // 로컬 변수에 직 접근하였을때
System.out.println("aproaching to local var " + op.data);
}
}
before change 50
after change 50
aproaching to local var 99
package com.example.call;
/*
* 참조호출의 경우에 호출된 메소드를 변경한다면, 원래 값이 변경될 수 있다.
* 어떤 원시타입 값을 주는대신에 객체를 전달한다면! 원래값이 바뀌게되는데
* 밑에 예제에서는 값을 대신해 객체를 전달하였다.
*
*
*/
class Operation2 {
int data = 50;
void change(Operation2 op) {
op.data = op.data + 100;
// op의 타입을 보자, 객체 Operation2이 타입으로 선언되있다는 말은
// 원시타입이 아닌 참조타입이라는 얘기이다.
// 참조호출을 통해 로컬변수로 접근할 수 있게된다.
}
public static void main(String args[]) {
Operation2 op = new Operation2();
System.out.println("before change " + op.data); //50
op.change(op);// 50 + 100
System.out.println("after change " + op.data);
}
}
before change 50
after change 150
'프로그래밍발전소 ♫ > JAVA 발전소♫' 카테고리의 다른 글
자바 재귀메소드, 재귀함수 java recursive ( Recursion in Java) (0) | 2017.09.25 |
---|---|
Java Array 자바 배열편! (0) | 2017.09.25 |
자바 Encapsulation Java 캡슐화! (0) | 2017.09.15 |
Java) 접근제한자 Access Modifier에 대해서! (0) | 2017.09.13 |
Java) Static Binding + Dynamic Binding (0) | 2017.08.11 |
RECENT COMMENT