명시적 형변환
- 메서드를 호출하는데 인자와 매개변수의 타입이 맞지 않다면 어떻게 해야할까? 다음 예제코드를 확인해보자!
public static void main(String[] args){ double number = 1.5; //printNumber(number); //double을 int형에 대입하므로 컴파일 오류 printNumber((int) number); //명시적 형변환을 사용해 double을 int로 변환 } public static void printNumber(int n) { System.out.println("숫자 : " + n); } }
- 먼저 주석으로 처리해둔 부분의 주석을 풀고 실행해보자.
printNumber(number) // double을 int형에 대입하므로 컴파일 오류다음과 같은 이유로 컴파일 오류가 발생한다.
printNumber(number) //number는 1.5 실수 printNumber(1.5) //메서드 호출전 number 변수의 값을 읽음 void printNumber(int n=1.5) //int형 매개변수 n에 double형 실수인 1.5를 대입 시도, 컴파일 오류이 경우 메서드 호출이 꼭 필요하다면 다음과 같이 명시적 형변환을 사용해야 한다.
printNumber((int) number); // 명시적 형변환을 사용해 double을 int로 변환 printNumber(1); //(double) 1.5 -> (int) 1로 변환 void printNumber(int n=1) //int형 파라미터 변수 n에 int형 1을 대입실행 결과
숫자 : 1자동 형변환
int < long < double
- 메서드 호출시 매개변수에 값을 전달하는 것도 결국 변수에 값을 대입하는 것이다. 따라서 앞서 배운 자동 형변환이 그대로 적용된다.
public static void main(String[] args){ int number = 100; printNumber(number); //int에서 double로 자동 형변환 } public static void printNumber(double n) { System.out.println("숫자 : " + n); } }
double형 매개변수(파라미터)에int형 인수를 전달하는데 문제없이 잘 동작한다.
실행 결과
숫자 : 100.0
- 다음과 같이 자동 형변환이 동작한다.
printNumber(number); //number는 int형 100 printNumber(100); //메서드 호출전 number 변수의 값 읽기 *** void printNumber(double n=100) //double형 파라미터 변수 n에 int형 값 100을 대입 void printNumber(double n=(double) 100) //double형 파라미터 변수 n에 int형 값 100을 대입 void printNumber(double n=100.0) //double형 파라미터 변수 n에 int형 값 100을 대입정리
메서드를 호출할 때는 전달하는 인수의 타입과 매개변수의 타입이 맞아야 한다. 단 타입이 달라도 자동 형변환이 가능한 경우에는 호출 할 수 있다.