(Java)java.lang.ClassCastException: java.lang.String은 java.lang.Integer로 캐스팅할 수 없습니다.

평소처럼 차분한 근무 시간.

편집할 수 있는 매개변수를 추가해서 정상적으로 편집했습니다.

코드를 한 줄 바꾸고 나서 매개변수 이름만 신경쓰면 에러 보고 안 할 자신이 있어서 배포를 했더니 이런 에러가 떴다.


무엇..?

익숙한 잘못된 이름입니다.

문자열이지만 왜 int로 변경합니까?

JS처럼 타입 변환을 할 수 있다면 좋겠지만 JAVA는 손이 더 많이 가는 친구다.

유형 변환이란 무엇입니까?
변수 또는 리터럴의 유형을 다른 유형으로 변환하여 다른 유형 간에 작업을 수행할 때 해당 유형과 일치시킵니다.

문자열, int 형 변환 방법

– 문자열을 int로
문자열 ex_str = “123”;
int ex_int = Integer.parseInt(ex_str);

– 정수를 문자열로
정수 ex_int = 123;
String ex_str = Integer.toString(ex_int);
또는
String ex_str = String.valueOf(ex_int);
또는
문자열 ex_str = ex_int + “”;

변환은 다음과 같이 수행할 수 있습니다.

가격 관련 파라미터라 int로 받을 줄 알았는데 ‘90,000’과 같은 가격 형식으로 값이 들어옵니다.

물론 문자열 형태로 제공됩니다.

내가 먼저 처리했다.

int price = jsonMap.get("price_format") == null ? 0 : (int) jsonMap.get("price_format");

이와 같이 값을 받으면 null이면 0을, null이 아니면 price_format의 값을 얻는다.

그런데 price_format이 문자열로 전달되는데 이런 식으로 typecasting을 하면 위와 같은 오류가 발생한다.

총 3개의 파트가 있으니 실수하지 않도록 주의하세요.

1. null 또는 비어 있지 않은 경우에만 값을 삽입하십시오.

2. String을 int로 변환하여 값을 int로 받습니다.

3. 가격 형식 때문에 입력된 쉼표(,)를 제거합니다.

if(!"".equals(price_format) && price_format!=null) {
    jsonMap.put("price_format", Integer.parseInt( price_format.replaceAll(",", "") ));
}

이렇게 수정합니다.

Integer.parseInt는 문자열을 int 유형으로 변환하는 데 사용되며, replaceAll() 함수는 쉼표에 사용됩니다.

까다로운 부분은 아니지만 그냥 잊어버리면 한 번 놓치고 에러를 내뱉는 녀석이 있으니 확인하고 넘어갑시다.

String int 외에도 변환하는 방법에 대해 알아보겠습니다.

그 다음에는 형 변환이 헷갈릴 때 와서 볼 수 있도록 메모만 정리했습니다.

전환하다 공식 결과
문자에 대한 정수 (문자) 65 ‘ㅏ’
문자를 정수로 (정수)A 65
부동 소수점 숫자 (정수)1.6f 하나
int float (부동) 10 10.0f

자동 유형 변환(암시적 유형 변환)

– 데이터가 손실되지 않는 한 자동 유형 변환.

byte(1) > short(2) > char(2) > int(4) > long(8) > float(4) > double(8)

조건부이지만 유형을 자동으로 변환하는 Java를 모르겠습니다.

전환하다 공식
두 배가 될 문자열 Double.valueOf(str)
띄울 문자열 Float.valueOf(str)
너무 긴 문자열 Long.parseLoing(str)
문자열 짧은 Short.parseShort(str)

정수<-->실수에 대한 유형 변환에는 ‘(int)’ 접두사가 붙습니다.(내 실수 사례)

char는 int와 함께 사용할 수 있습니다.


이 ASCII 코드 테이블의 숫자는 별도의 유형 변환 없이 char 및 int에서 연산할 수 있습니다.

char a = 97;
int b = a + 100;

System.out.println(b) //197