zoukankan      html  css  js  c++  java
  • scala与java的==的比较

    如果你想比较一下看看两个对象是否相等,可以使用或者==,或它的反义 !=。(对所有对象都适用,而不仅仅是基本数据类型)

    1
    2
    3
    4
    scala> 1 ==  2
    res24: Boolean = false
    scala> 1 !=  2
    res25: Boolean = true

    这些操作对所有对象都起作用,而不仅仅是基本类型。例如,你可以用他比较列表:

    1
    2
    3
    4
    scala> List(1, 2, 3) == List(1, 2, 3)
    res27: Boolean = true
    scala> List(1, 2, 3) == List(4, 5, 6)
    res28: Boolean = false

    进一步,你还可以比较不同类型的两个对象:

    1
    2
    3
    4
    scala> 1 ==  1.0 
    res29: Boolean = true
    scala> List(1, 2, 3) == "hello"
    res30: Boolean = false

    你甚至可以比较null,或任何可能是null 的东西。不会有任何异常被抛出: 

    1
    2
    3
    4
    scala> List(1, 2, 3) == null
    res31: Boolean = false
    scala> null ==  List(1, 2, 3)
    res32: Boolean = false

    (但比较:null == null)时就报错了)

    1
    2
    3
    规则:首先检查左侧是否为null,如果不是,调用equals
    方法。由于equals是一个方法,因此比较的精度取决于左手边的参数。又由于已经有一个
    自动的null检查,因此你不需要手动再检查一次了。

    这种类型的比较对于不同的对象也会产生 true,只要他们的内容是相同的并且它们的
    equals 方法是基于内容编写的。例如,以下是恰好都有五个同样字母的两个字串的比较: 

    1
    2
    scala> ( "he" + "llo") == "hello"
    res33: Boolean = true

    Scala 的==与Java的有何差别

    Java 里的既可以比较基本类型也可以比较引用类型。对于基本类型,Java 的==比较
    值比较,如Scala。然而对于引用类型,Java 的==比较了引用的是否为同一个对象(比较内存地址),也就是说这两个变量是否都指向于JVM 堆里的同一个对象。Scala 也提供了这
    种机制,名字是 eq。不过,eq和它的反义词,ne,仅仅应用于 可以直接映射到Java的对
    象。


    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    object BitOpt {
      class A{}
     def main(args:Array[String]){
       val a = new A
       val b = new A
        println(a==b)
        println(a eq b)
        println(a ne b)
        println(!a.eq(b))
     }
    }
     
    结果:
    false
    false
    true
    true
  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/langren1992/p/5022517.html
Copyright © 2011-2022 走看看