블로그

[JAVA] 강제 타입 변환, 연산식에서 자동 타입 변환 본문

개발자 준비과정/JAVA

[JAVA] 강제 타입 변환, 연산식에서 자동 타입 변환

하늘바람a 2024. 2. 26. 11:29
  • 강제 타입 변환 : 큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것
  • 하는 법 
    • 작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입
  • long -> int 타입
long longValue= 300;
int intValue = (int) longValue; // int 캐스팅

 

  • int -> char 타입
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue);
// 유니코드에서 문자 65번인 A가 출력됨

 

  • 실수 -> 정수 타입
double doubleValue = 3.14;
int intValue = (int) doubleValue; // intValue는 정수 부분인 3만 저장됨

 


연산식에서 자동 타입 변환

 

자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 수행한다

 

정수 리터럴끼리의 덧셈 연산을 한다면 실행 시 덧셈 연산이 없으므로 실행 성능이 좋아진다.

 

하지만 변수가 피연산자로 사용되면 실행 시 연산을 수행한다

 

정수 타입 변수가 산술 연산식에서 피연산자로 사용되면

byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행한다

 

정수 연산에서 변수가 사용될 경우에는 int 타입으로 변수를 선언하는 것이 타입 변환이 발생하지 않기 때문에 실행 성능에 도움이 된다

 

피연산자가 long 타입이라면 다른 피연산자는 long 타입으로 변환되어 연산 수행한다

->연산결과는 long 타입 변수에 저장해야 한다

 


 

실수연산일 때

 

피연산자 타입에 따라서

  1. 동일한 실수 타입 -> 해당 타입으로 연산 된다
  2. 다른 실수 타입 -> 더 큰 범위의 타입으로 자동 변환되어 연산 된다
      • 작은 범위의 타입으로 바꾸고 싶다면? -> 강제 타입 변환을 시켜야 한다
int a=10; double b=2.5;
double result1 = a+b; // 10+2.5
int result2 = a + (int) b ; // 10+2

 

정수 연산일 때

 

  • 결과는 항상 정수가 된다.
int x=1; int y=2;
double result = x/y; // 1/2=0.5가 출력될까?

위의 result값은 0.5일까? 아니다. 정수연산끼리의 결과는 정수가 되기 때문에 0.0이 출력된다.

 

위의 연산과정은 이렇다.

  1. x / y = 0
  2. 0을 double 타입에 저장 -> 0.0

0.5로 만들기 위해서는 정수연산이 아닌 실수연산으로 변경해야 한다

  1. x , y 둘 중 하나를 double타입으로 변환 (double)x/y;
  2. 둘 모두를  double타입으로 변환 (double)x/(double)y;

※ 여기서 주의점이 있다.

(double)(x/y)는 0.0이 된다는 것이다.

  1. ( x / y ) 연산 -> 0
  2. double 타입으로 변환 ->0.0

 


+ 연산자의 기능

 

  • 피연산자 모두 숫자 -> 덧셈 연산 수행
  • 피연산자 중 하나가 문자열 -> 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산 수행
int value = 2 + 3; -> int value = 5;
String str = "2" + 3; -> String str = "23";
//하나라도 문자열이면 문자열 결합 연산 수행

 

  • 피연산자가 여러개일 때 -> 순차적으로 +연산을 수행
int value= 1+2+3 -> int value = 3+3 -> int value =6;
String str= 1+2+"3" -> String str = 3+"3" -> String str="33";
String str= 1+"2"+3 -> String str = "12"+3 -> String str="123";
String str= "1"+2+3 -> String str = "12"+3 -> String str="123";

 

  • 순차적으로 +연산을 수행하고 싶지 않다면 -> ()괄호로 감싸기