*자바는 항상 변수의 값을 복사해서 대입한다.
package method;
public class MethodValue0 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("1.변경 전 num1 = " + num1); //1.변경 전 num1 = 5
changeNumber(num1);
System.out.println("4.변경 후 num1 = " + num1); //4.변경 후 num2 = 5
}
public static void changeNumber(int num2) {
System.out.println("2.변경 전 num2 = " + num2); //2.변경 전 num2 = 5
num2 = num2 * 2;
System.out.println("3.변경 후 num2 = " + num2); //3.변경 후 num1 = 10
}
}
- changeNumber(num1) 의 출력값이 10이라고 생각될 수 있지만 여전히 5이다.
메서드로 num1의 값을 복사해서 전달한다. 따라서 전달받은 num2의 5가되고 연산으로 10이 될 수 있지만,
num1의 값은 영향을 받지 않는다.
package method;
public class MethodValue1 {
public static void main(String[] args) {
int number = 5;
System.out.println("1.변경 전 number = " + number); //1.변경 전 number = 5
changeNumber(number);
System.out.println("4.변경 후 number = " + number); //4.변경 후 number = 5
}
public static void changeNumber(int number) {
System.out.println("2.변경 전 number = " + number); //2.변경 전 number = 5
number = number * 2;
System.out.println("3.변경 후 number = " + number); //3.변경 후 number = 10
}
}
- main에 정의한 변수와 메서드의 매개변수를 같은이름 number로 사용해도 위의 출력값과 똑같다.
main도 메서드이다. 메서드 안에서 사용하는 변수는 완전히 분리된 다른 변수이다.
따라서 main의 number와 changeNumber의 number은 이름은 같지만 다른 변수이다.
*메서드를 호출해 변경된 값을 얻으려면 다음과 같이 코딩한다.
package method;
public class MethodValue2 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("num1 = " + num1);
num1 = changeNumber(num1);
System.out.println("num1 = " + num1);
}
public static int changeNumber(int num2) {
num2 = num2 * 2;
return num2;
}
}
'백엔드 > Java' 카테고리의 다른 글
[Java]#19 Method 오버로딩 (1) | 2023.12.20 |
---|---|
[Java]#18 Method와 형변환 (0) | 2023.12.20 |
[Java]#16 Method 반환 타입 (0) | 2023.12.20 |
[Java]#15 Method (0) | 2023.12.20 |
[Java]#14 향상된 For (0) | 2023.12.18 |