프로그래밍을 공부하다 보면 데이터 타입이 맞지 않아도 서호 호환? 이되고 값을 서로 주고받는 모습을 자주 보게된다.
물론 형변환을 알고 있어 그리 낯선 모습은 아니지만 조금 더 알아보고자 기록하려한다.
작은 데이터 타입을 큰 데이터 타입으로 변환하여 값이 정말도를 잃거나 오버플로우 문제가 발생하지 않는 변환
Byte byte = 127;
Long long = 0;
long = byte;
log.info("Byte -> Long : {}", long); // "Byte -> Long : 127"
큰 데이터 타입을 작은 데이터 타입으로 변환하는 작업
잠재적으로 정밀도를 잃거나 잘림 문제가 발생할 수 있습니다. 축소 변환에는 의도된 변환에 대해 컴파일러에 알리기 위해 명시적 유형 캐스팅이 필요하다.
Byte byte = 0;
Long long = 9223372036854775807;
byte = (Byte)long;
log.info("Long -> Byte : {}", byte); // "Byte -> Long : -1"
char은 (문자형, 문자 정수형)이라고 표현하며 16비트 데이터 타입이다.
문자 데이터 형식을 저장할 수 있고, 유니코드를 직접 넣어 문자를 표현할 수도 있다.
char ch = 'A';
int charValue = (int)ch;
log.info("charValue : {}", ch) // ASCII값(10진수 65)로 변환된다.
class Solution {
public String solution(String str1, String str2) {
return IntStream.range(0, str1.length())
.mapToObj(idx -> String.valueOf(str1.charAt(idx)) + str2.charAt(idx))
.reduce("", String::concat);
}
}
String.valueOf(str1.charAt(idx)) + str2.charAt(idx)
이 부분에서 약간 어..?하고 헷갈렸다.
내 로직은 처음에 str1.charAt(idx)) + str2.charAt(idx)
이렇게 작성해 놓고 자꾸 콘솔에는 숫자만 출력되길래 왜 안되지..? 하고 있었다....
두개의 char 타입을 연산하면 JAVA는 해당 유니코드 값으로 연산을 수행한다.
즉, 나는 String 으로 반환받길 원하니깐 두 char 타입 중 적어도 하나가 String 타입으로 변환되어야 했었다.