68

I am from a Java background and new to Scala.

I am using Scala and Spark. But I'm not able to understand where I use ==and ===.

Could anyone let me know in which scenario I need to use these two operators, and what's are difference between == and ===?

5
  • 3
    Possible duplicate of Scala equality with type checking? Commented Sep 14, 2016 at 12:18
  • 1
    You should provide a context. === and == are just functions as any other. They have no special meaning whatsoever.
    – zero323
    Commented Sep 14, 2016 at 12:25
  • 1
    @cricket_007 I seriously doubt OP is into Scalaz / Cats. My guess is it is more about Spark SQL.
    – zero323
    Commented Sep 14, 2016 at 12:56
  • @zero323 While I agree, I wasn't intending to point at Scalaz, just that "type checking" may be the difference. As you point out, they are just functions and more context needs added as to the objects that are compared Commented Sep 14, 2016 at 14:36
  • @zero323: I agree, I think the OP is interested in Spark SQL. And may be new enough to Spark to not know that he is working with Datasets/DataFrames. Commented Jul 31, 2017 at 15:03

3 Answers 3

76

The "==" is using the equals methods which checks if the two references point to the same object. The definition of "===" depends on the context/object. For Spark , "===" is using the equalTo method. See

(Since you are referencing Spark:) An important difference for Spark is the return value. For Column:

  • == returns a boolean

  • === returns a column (which contains the result of the comparisons of the elements of two columns)

1
  • 18
    Additionally, Spark SQL must use the === operator as the == operator cannot be overloaded. Commented Sep 12, 2017 at 19:24
14

Generally speaking, they are just functions.

For different types, "==" and "===" might be defined or "overloaded" for different meanings.

For example, in some test framework, "===" is defined for some special function. See this.

5

ScalaTest lets you use Scala's assertion syntax, but defines a triple equals operator (===) to give you better error messages. The following code would give you an error indicating only that an assertion failed:

assert(1 == 2) Using triple equals instead would give you the more informative error message, "1 did not equal 2":

assert(1 === 2)

have a look at this page for more details; What is the === (triple-equals) operator in Scala Koans?

Not the answer you're looking for? Browse other questions tagged or ask your own question.