2009-08-12 6 views
45

내가 Integer로 선언 한 변수로 작업 중이며> Integer의 멤버가 아닌 것을 발견했습니다. 다음은 간단한 예제이다스칼라에서 Int와 Integer의 차이점은 무엇입니까?

scala> i 
warning: there were deprecation warnings; re-run with -deprecation for details 
res28: Integer = 3 

scala> i > 3 
<console>:6: error: value > is not a member of Integer 
     i > 3 
     ^

는 int로 그 비교 :

scala> j 
res30: Int = 3 

scala> j > 3 
res31: Boolean = false 

정수와 지능 사이의 차이점은 무엇입니까? 사용 중단 경고가 표시되지만 사용 중지 된 이유와 이유가 무엇인지 모르는 이유가 명확하지 않습니다.

+0

감사합니다. 유용한 답변입니다. 당신은 모두 내 질문에 답합니다. 그래서 가장 높은 등급의 응답이 맨 위로 올라가서 대답으로 표시 할 것입니다. 그동안 모든 응답을 평가했습니다. – pr1001

답변

40

"정수와 Int의 차이점은 무엇입니까?"

정수는 java.lang.Integer의 별명입니다. Int는 추가 기능이있는 Scala 정수입니다. 당신은 당신의 지능을 사용할 수 있다는 것을 의미, 필요하면하는 java.lang.Integer에 지능에서 암시 적 변환이, 그러나

/** @deprecated use <code>java.lang.Integer</code> instead */ 
    @deprecated type Integer = java.lang.Integer 

:

Predef.scala에서 보면이 별칭을 볼 수 있습니다 Integer를 취하는 메소드.

왜 사용되지 않는지에 관해서는, 나는 당신이 어떤 종류의 정수를 다루고 있는지 혼동하지 않기 위해서였다.

3

정수는 java.lang.Integer에서 가져오고 Java와의 호환성을 위해서만 사용됩니다. Java 클래스이므로 "<"메서드를 사용할 수 없습니다. 편집 : Integer에서 Int 로의 암시 적 변환을 선언하여이 문제를 완화 할 수 있습니다.

implicit def toInt(in:Integer) = in.intValue() 

그래도 경고가 표시됩니다.

4

나는 당신이보고있는 문제가 가치 유형의 복싱/언 박싱과 자바 클래스 Integer의 사용을 고려해야한다고 생각한다.

나는 대답이 여기에 있다고 생각한다 : Boxing and unboxing in Scala. 스칼라에는 함축 된 암시가 없습니다. 을 Java 클래스 정수로 정의했지만 > i> 3 인 경우 3을 처리하고 int를 정의했습니다.

+0

링크가 깨졌습니다. – 203

1

Integerjava.lang.Integer입니다. 클래스가 아닌 자바의 기본 유형 int과 다릅니다. <은 Java에서 클래스에 대해 연산자를 정의 할 수 없기 때문에 정의 할 수 없습니다.

이제 이러한 유형이 전혀 존재하지 않는 이유가 궁금 할 것입니다. 음, 원시 타입은 참조로 전달 될 수 없기 때문에, intjava.lang.Object과 같은 메소드에 전달할 수 있습니다. 예를 들어 Scala의 AnyRef과 같습니다. 그렇게하려면 을 Integer 개체 안에 넣은 다음 Integer을 전달합니다.

1

정수는 java.lang.Integer에서 가져오고 Java와의 호환성을 위해서만 사용됩니다. Java 클래스이므로 "<"메서드를 사용할 수 없습니다.

편집 : Integer에서 Int로 암시 적 변환을 선언하면이 문제를 완화 할 수 있습니다.

관련 문제