본문 바로가기
[개발] Programming/Java

자바 Cannot invoke compareTo(int) on the primitive type int

by eatyourKimchi 2019. 7. 11.
728x90

 

 

자바에서 .compareTo() 메소드를 사용하려니 발생한 오류.

'Cannot invoke compareTo(int) on the primitive type int'

원인: primitive type은 클래스가 아니라 메소드를 호출할 수 없는데, 호출을 시도했기 때문.

 

 

오류가 발생하는 소스

1
2
3
4
5
6
7
8
9
// 숫자를 입력할 수 있는 vo가 있다고 가정
NumVo vo = new NumVo();
 
vo.setNumA(1);
vo.setNumB(1);
 
int result = vo.getNumA().compareTo(vo.getNumB());
// 결과: compareTo에서 오류 발생
cs

 

 

 

오류를 해결하기 위해서는 2가지 해결 방법이 있다.

 

1. int 타입의 경우 compareTo 대싱 <, >, = 등으로 비교를 하면 된다.

1
2
3
4
5
6
7
// 숫자를 입력할 수 있는 vo가 있다고 가정
NumVo vo = new NumVo();
 
vo.setNumA(1);
vo.setNumB(1);
 
int result = vo.getNumA() > (vo.getNumB();
cs

 

2. int를 클래스로 감싸주면 된다.

1
2
3
4
5
6
7
8
// 숫자를 입력할 수 있는 vo가 있다고 가정
NumVo vo = new NumVo();
 
vo.setNumA(1);
vo.setNumB(1);
 
Integer tmp = new Integer(vo.getNumA());
int result = tmp.compareTo(vo.getNumB());
cs

 

 

 

그렇다면 int와 Integer의 차이는?

 

자바의 자료형은 크게 기본형(primitive type)과 참조형(referene type)으로 나뉜다.

기본형은 byte, int, long 등등으로 자바 객체를 사용하기 위해서 레퍼 클래스를 활용한다.

 

기본형  -  wrapper class
byte     -  Byte
short    -  Short
int       -  Integer
long     -  Long
double  -  Double

 

그럼 이제 기본형도 참조형 처럼 사용할 수 있다.

 

 

728x90