복붙노트

[SCALA] `##`와`hashCode`의 차이점은 무엇입니까?

SCALA

`##`와`hashCode`의 차이점은 무엇입니까?

방법의 차이 ##와 hashCode는 무엇인가?

그들은 상관없이 어떤 클래스 나 해시 코드 내가 사용하는 오버로드 같은 값을 출력되지 않을 것으로 보인다. 이 기호를 찾을 수 없습니다 구글은 ##, 도움이되지 않습니다, 중.

해결법

  1. ==============================

    1."서브 클래스는"AnyVal의 해시 관점에서 제대로 작동하지 않습니다 :

    "서브 클래스는"AnyVal의 해시 관점에서 제대로 작동하지 않습니다 :

    scala> 1.0.hashCode
    res14: Int = 1072693248
    

    물론이에 대한 호출에 박스입니다 :

    scala> new java.lang.Double(1.0).hashCode
    res16: Int = 1072693248
    

    우리는 수를 선호 할 수 :

    scala> new java.lang.Double(1.0).##
    res17: Int = 1
    
    scala> 1.0.##
    res15: Int = 1
    

    우리는 이것이 INT 1 물론이 문제는 자바에서 발생하지 않습니다의 이중 1입니다 주어진 기대한다. 그게 없으면, 우리는이 문제가있는 것입니다 :

    Set(1.0) contains 1 //compiles but is false
    

    운 좋게:

    scala> Set(1.0) contains 1
    res21: Boolean = true
    
  2. ==============================

    2.해시 코드 스칼라 == 연산자와 일치하지 않기 때문에 ##을 도입 하였다. 다음에 B A ==. ## == B.없이 ##는 A 유형 및 B (맞춤 해시 코드 구현이 올바른지)의 경우. 같은 다른 포스터에 의해 주어진 예에서 볼 수 있듯이 해시 코드에 대한 사실이 아니다.

    해시 코드 스칼라 == 연산자와 일치하지 않기 때문에 ##을 도입 하였다. 다음에 B A ==. ## == B.없이 ##는 A 유형 및 B (맞춤 해시 코드 구현이 올바른지)의 경우. 같은 다른 포스터에 의해 주어진 예에서 볼 수 있듯이 해시 코드에 대한 사실이 아니다.

  3. ==============================

    3.## 방법 최선의 노력을 기울이고은 평등과 해시 코드 사이의 계약을 유지하지만, 당신이 복식과 갈망을 비교하는 경우와 같은 경우에 충분한, (스칼라 2.10.2 분명히 아니라고 그냥 다른 포스터의 답변에 추가 할 ) :

    ## 방법 최선의 노력을 기울이고은 평등과 해시 코드 사이의 계약을 유지하지만, 당신이 복식과 갈망을 비교하는 경우와 같은 경우에 충분한, (스칼라 2.10.2 분명히 아니라고 그냥 다른 포스터의 답변에 추가 할 ) :

    > import java.lang._
    import java.lang._
    
    > val lng = Integer.MAX_VALUE.toLong + 1
    lng: Long = 2147483648
    
    > val dbl = Integer.MAX_VALUE.toDouble + 1
    dbl: Double = 2.147483648E9
    
    > lng == dbl
    res65: Boolean = true
    
    > lng.## == dbl.##
    res66: Boolean = false
    
    > (lng.##, lng.hashCode)
    res67: (Int, Int) = (-2147483647,-2147483648)
    
    > (dbl.##, dbl.hashCode)
    res68: (Int, Int) = (-2147483648,1105199104)
    
  4. from https://stackoverflow.com/questions/9068154/what-is-the-difference-between-and-hashcode by cc-by-sa and MIT license