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

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

by eatyourKimchi 2019. 7. 11.

 

 

자바에서 .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

 

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

 

 

댓글