본문 바로가기

카테고리 없음

자바(JAVA) 형 변환

자바 형변환
자바에서는 개발자가 따로 명시하지 않아도 형변환이 일어나거나 따로 형변환을 명시하여 형변환을 할 수 있는데 아래와 같다


1. 자동형변환: 개발자가 따로 명시하지 않았으나 자동으로 형변환이 일어나는 것

byte -> short -> int -> long -> float ->double
             char -> int -> long -> float ->double

규칙 1. 자료형의 크기가 큰 방향으로 형 변환이 일어난다
EX)
int num1 = 50;
long num2 = 3147483647L;
System.out.println(num1 + num2);
---> num1에 저장된 값이 long형으로 형 변환된다(int가 long보다 작으므로 long으로 형변환이 일어난 것)


규칙 2. 자료형의 크기에 상관없이 정수 자료형보다 실수 자료형이 우선한다(LONG과 FLOAT의 경우 FLOAT로 변환)

long numl = 1;
float f1 = 0.1f;            

System.out.println(numl+f1);

---> 자료형의 크기는 long이 8byte로 float 4byte보다 더 크나 규칙 2에의해 실수 자료형으로 변환되어 float 형으로 자동 형변환이 발생
      (실수의 경우 정해진 연산방법에 따라 연산하고, 정수의 경우 이진연산을 하므로 
       정수를 실수방식으로 연산방법을 변환하는 과정이 필요함 그래서 실수를 기준으로 계산하는 것(LONG -> FLOAT))



2. 명시적 형변환: 자동 형 변환 규칙에 부합하지는 않지만,  형 변환이 필요한 상황이면 명시적 형 변환을 진행한다
EX)
double pi = 3.1415;
int wholenumber = pi;
---> 컴파일 에러(형식이 안맞기 떄문)

double pi = 3.1415;
int wholenumber = (int) pi;
---> 정상적으로 작동(double형을 강제로 int형으로 바꿔줬기 때문), 그대신 3으로 작성된다(소수는 실수부이기 때문)
 -----> 강제로 변환하는 것이기 때문에 숫자가 맞지 않으면 짤린다(조심하게 사용)


long num1 = 3000000007L;
int num2 = (int)num1;
System.out.println(num2);
---> -1294967289(인트범위를 범었기 때문에 인트범위 중 -범위 끝부터 시작된 것)


3. 문자와 같이 쓰는경우 형변환

원의 반지름이 5이다
원을 넓이를 구하시오
double radius = 5;
final double PI = 3.14;
double area = (double)(radius *radius )*PI;
System.out.println("넓이: " + area);

---> 넓이: 78.5

double radius = 5;
final double PI = 3.14;
double area = (radius*radius)*PI;
System.out.println("넓이: " + "78.5");


---> 넓이: 78.5
문자와 같이 쓸 경우 이런 논리로 형변환되어서 작성되는 것(결론은 area의 값이 문자로 변환해서 작성되는 것이다)
--> 즉 문자와 같이 쓴 숫자는 문자로 변환되는 것(나중에 함수쓸 때 참고해야됨)