기본형
- 자동 형변환
- 혹은 묵시적 변환 (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'Language & Tool > Java' 카테고리의 다른 글
| ☕OOP 핵심: 부모 클래스를 재사용하여 새로운 클래스를 작성하는 상속(Inheritance) (0) | 2026.06.05 |
|---|---|
| 🌱변수 생성시 위치별 초기화 규칙 (0) | 2025.09.14 |
| 🌱JAVA 패키지 정리 모음 (0) | 2025.09.08 |
| 🌱JAVA 문법 기초 (+ 초기화 예시) (0) | 2025.09.08 |
| 🌱기본 입출력 (0) | 2025.09.08 |