본문 바로가기
Language & Tool/Java

🌱JAVA 형변환 정리

by 박수무당벌레 2025. 9. 8.

기본형

 

- 자동 형변환

  • 혹은 묵시적 변환 (widening)
  • 피연산자가 모두 정수형이면, 작은 자료형 → 큰 자료형 으로 자동 변환(승격)
    ※ 정수 승격 규칙
      ①  int + long → long
      ②  int + float → float
      ③  long + double → double 
  • 정수형, 실수형이 혼용되면 실수형(double/float)로 자동 형변환
    ※ 정수형 → 실수형 형변환 규칙
      ①  int + float → float
      ②  long + double → double
int a = 10;
double b = a;   // int → double 자동 변환
System.out.println(b); // 10.0

double d = 10;  // 선언 시점에도 가능

 

- 강제 형변환

  • 명시적 변환 (narrowing)
  • 큰 자료형 → 작은 자료형 변환할 때 변환할 값 앞에 (타입) 명시
    → 변수명이 아니더라도 값 자체에도 가능
    (예시) (int)'A'  도 가능
  • 나누기 연산의 경우, int형끼리 연산이라도 한쪽을 캐스팅해서 소수점이 버려지는 걸 방지 (둘다 승격)
    ∵ Java에서 산술 연산은 두 피연산자 타입을 맞춘 후 진행
double x = 3.14;
int y = (int)x;     // double → int (소수점 버림)
System.out.println(y); // 3

int i = (int)3.14;  // 선언 시점에도 가능 (소수점 버림)

int sum = 7;
int n = 2;
double avg1 = sum / n;           // 3 (int/int → int)
double avg2 = (double)sum / n;   // 3.5 (명시적 형변환)

 

 

문자 ↔ 정수 (아스키 코드)

char c = 'A';
int code = (int)c;   // 문자 → 정수 (유니코드 값)
System.out.println(code); // 65

int num = 97;
char d = (char)num;  // 정수 → 문자
System.out.println(d); // 'a'

 

 

문자열 ↔ 기본형

 

  • .parseXXX ( parseInt, parseDouble, .. 등) : 문자열을 기본형으로 반환
  • .valueOf : 매개변수로 기본형(참조형과 관련된 원시 타입) 또는 문자열을 받아  참조형 (Wrapper 객체) 으로 반환
    (예시) Integer.valueOf(int i) :: 기본형 int → Integer 객체 (오토박싱)
  • .toString : 숫자에서 문자열 변환
  • String.charAt : 해당 인덱스의 위치의 문자를 반환 (문자열에서 문자 추출)
// 문자열 → 숫자
int n = Integer.parseInt("123");
double d = Double.parseDouble("3.14");

// 숫자 → 문자열
String s1 = String.valueOf(100);
String s2 = Integer.toString(200);

// 문자열 ↔ 문자
String str = "Hello";
char ch = str.charAt(0);  // H
String s3 = String.valueOf(ch); // "H"
※ 문자열의 요소 접근과 배열 변환
- 문자열에서 특정 위치 (index) 에 있는 문자 접근을 하려면 charAt 사용 필요 (결과 char 반환)
- toCharArray() 로 변환하면 배열 접근도 가능 ( str[index] 는 불가 )
char[] arr = str.toCharArray();
System.out.println(arr[0]); // 'H'

 

 

- 추가 예시 (char → int)

  • char는 문자 자체를 저장하는 타입, But. 내부적으로 유니코드 정수값(2바이트) 로 저장
  • 연산자 규칙 때문에 char → int 로 자동 승격
    → 산술 연산자(+, -, *, /) 는 기본적으로 int 이상에서 동작
  • (예시) '7' - '0' : 내부적으로 자동으로 int 변환된 후 연산 수행  (실제 동작 과정 = (int)'7' - (int)'0' )
System.out.println('A' + 1); // 66 (char → int 변환 후 연산)
System.out.println((char)('A' + 1)); // 'B' (다시 문자로 변환)

 

 

예시 코드

// (1) 배열 합계 구하고 평균 구하기
int[] arr = {1, 2, 3};
int sum = 0;
for (int x : arr) sum += x;
double avg = (double)sum / arr.length; // int/int → double 변환

// (2) 문자열 숫자 합치기
String a = "12";
String b = "34";
int result = Integer.parseInt(a) + Integer.parseInt(b); // 12+34=46

// (3) 문자 → 숫자
char ch = '7';
int digit = ch - '0';  // '7' → 7