Main 프레임을 만들던 중 데이터형이 int인 JOptionpane과 String형 배열을 if를 통해 비교해야하는 상황 발생
*오류 코드*
1
2
3
4
5
6
7
8
9
10
|
public static void main(String[] args) {
String[] menuMsg = { "수입입력", "지출입력", "사용내역조회", "통계" };
int MenuSelect = JOptionPane.showOptionDialog(null, "", " 티끌모아아파트",JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, menuMsg, menuMsg[0]);
//MainFrame
if(menuMsg[0] == MenuSelect){ //오류발생부분
Income I = new Income();
I.IncomeInput();
}
|
cs |
오류 내용은 Incompatible operand types int and String 으로 String과 int를 함께 호환할 수 없다는 뜻이다.
if()안에서 int와 String은 서로 비교가 불가능하다는 것!
*해결방법*
int를 String으로 String을 int로 변경해준다.
문자열(String)을 숫자(int)로
Integer.parseInt()
parseInt() 메소드는 파라미터로 숫자로 변환할 문자열을 입력받고, 입력받은 문자열을 integer로 변환한 int 값으로 리턴합니다.
String str1 = "000";
int int1 = Integer.parseInt(str1);
syso(int1) // 000
여기서 syso를 통해 출력된 것은 숫자이다.
Integer.ValueOf()
parseInt()와 마찬가지로 파라미터로 받은 숫자를 문자열로 변경할 수 있습니다.
그러나 parseInt()와의 차이점은, ValueOf의 리턴타입은 객체라는 것이다.
즉, 문자열을 변환할 때 객체로 받아서 사용하느냐, 기본 자료형으로 받아서 사용하느냐에따라 parseInt()와 Value()를 맞추어서 사용하면된다.
String str1 = "000";
int int1 = Integer.valueOf(str1);
syso(int1); // 000
여기서 syso를 통해 출력된 것은 객체타입이다.
이 말은 문자열 값을 정수형으로 변환한다음 객체로 만들어 변환, new Integer(Integer.parseInt(str1)) 의 값이 리턴된다는 것이다.
사실 Java 1.5에 도입된 'Autoboxing and Unboxing' 덕에 서로 무엇을 써도 상관은 없다. Integer객체로 리턴을 받아 int변수에 할당을 하면 자동으로 형변환이 일어나기 때문이다. 대신 내부적으로 객체 생성 오버헤드가 있을 수 있다.
*Autoboxing and Unboxing
Autoboxing은 자바 컴파일러가 primitive data type을 그에 상응하는 wrapper class로 자동 형변환 시켜주는 기능이다.
ex) int -> integer, double -> Double
Unboxing은 반대로 wrapper class를 primitive data type으로 자동 형변환 시켜주는 작업을 말한다.
https://jamesdreaming.tistory.com/154
*객체 생성 오버 헤드
프로그램의 실행 흐름에서 나타나는 현상 중 하나로 프로그램의 실행흐름 도중에 동떨어진 위치의 코드를 실행해야할 때, 추가적으로 시간, 메모리, 자원이 사용되는 현상이다.
https://gamestory2.tistory.com/15
숫자(int)를 문자열로
Integer.toString()
Integer.toString() 혹은 String.ValueOf()를 이용할 수 있고 간단하게는 빈 문자열과 int를 + 연산자로 묶어서 문자열로 변환할 수 있다.
int int1 = 000;
String str1 = Integer.toString(int1); //000
String str2 = String.ValueOf(int1); //000
String str3 = "" + int1; //000
세개의 예시 모두 문자열 000이 출력된다.
str1와 str3은 기본 데이터타입의 문자열 000일 것이고 str2는 객체의 000일 것이다.
str3은 문자열은 문자열에 int를 이어붙히면 그 int까지 포함하여 최종적으론 문자열이 리턴되는 속성이 있는데 이를 이용한 것이다.
'프로젝트 > 가계부 프로젝트' 카테고리의 다른 글
자바(java)_ArrayList와 List (0) | 2022.04.17 |
---|---|
자바(java)_돈을 표기할 때 사용하는 데이터 형식 (0) | 2022.04.06 |
자바(java)_JOptionDialog if문으로 출력하기 (0) | 2022.04.03 |
가계부 프로젝트 (0) | 2022.03.23 |