Bird
Raised Fist0
Rubyprogramming~15 mins

Object identity (equal? vs ==) in Ruby - Hands-On Comparison

Choose your learning style10 modes available
Understanding Object Identity with equal? vs ==
📖 Scenario: Imagine you have two boxes that look the same and hold the same toys. You want to check if they are actually the same box or just two boxes with the same toys inside.
🎯 Goal: You will learn how to check if two objects are exactly the same object in memory or just look equal in Ruby using equal? and ==.
📋 What You'll Learn
Create two string variables with the same content
Create a third variable pointing to one of the first strings
Use equal? to check if two variables point to the same object
Use == to check if two variables have the same content
Print the results clearly
💡 Why This Matters
🌍 Real World
Understanding object identity helps avoid bugs when working with data that might look the same but are different objects, such as user inputs or data from files.
💼 Career
Many programming jobs require knowing when two variables refer to the same object or just equal data, especially in debugging and optimizing code.
Progress0 / 4 steps
1
Create two string variables with the same content
Create two string variables called string1 and string2 with the exact value "hello".
Ruby
Hint

Use = to assign the string "hello" to both string1 and string2.

2
Create a third variable pointing to the first string
Create a variable called string3 and set it equal to string1.
Ruby
Hint

Assign string3 to be the same object as string1 by using =.

3
Check object identity with equal?
Use equal? to check if string1 and string2 are the same object, and also if string1 and string3 are the same object. Store the results in variables same_object_1_2 and same_object_1_3 respectively.
Ruby
Hint

Use variable = object1.equal?(object2) to check if two variables point to the same object.

4
Print the results of equal? and ==
Print the values of same_object_1_2 and same_object_1_3. Then print the result of string1 == string2 and string1 == string3 to show if their contents are equal.
Ruby
Hint

Use puts with string interpolation to print the variable names and their values clearly.

Practice

(1/5)
1. In Ruby, what does the method equal? check between two objects?
easy
A. If both objects respond to the same methods
B. If both objects have the same content or value
C. If both variables point to the exact same object in memory
D. If both objects are of the same class

Solution

  1. Step 1: Understand equal? method purpose

    The equal? method checks if two variables reference the exact same object in memory, not just if they look alike.
  2. Step 2: Compare with other methods

    Unlike ==, which compares content, equal? is about object identity.
  3. Final Answer:

    If both variables point to the exact same object in memory -> Option C
  4. Quick Check:

    equal? checks object identity = D [OK]
Hint: Remember: equal? means same object, not just same value [OK]
Common Mistakes:
  • Confusing equal? with ==
  • Thinking equal? compares content
  • Assuming equal? checks class type
2. Which of the following Ruby code snippets correctly uses equal? to check if two variables refer to the same object?
easy
A. a.equal?(b)
B. a == b
C. a.equals(b)
D. equal?(a, b)

Solution

  1. Step 1: Recall correct syntax for equal?

    The method equal? is called on one object and passed another as an argument, like a.equal?(b).
  2. Step 2: Identify incorrect options

    a == b uses content equality, a.equals(b) is not a Ruby method, and equal?(a, b) is invalid syntax.
  3. Final Answer:

    a.equal?(b) -> Option A
  4. Quick Check:

    Correct equal? syntax = B [OK]
Hint: Use object.equal?(other_object) syntax [OK]
Common Mistakes:
  • Using == instead of equal?
  • Writing equals instead of equal?
  • Calling equal? as a standalone function
3. What will be the output of the following Ruby code?
a = "hello"
b = "hello"
puts a == b
puts a.equal?(b)
medium
A. true true
B. true false
C. false true
D. false false

Solution

  1. Step 1: Evaluate a == b

    Both a and b are strings with the same content "hello", so a == b returns true.
  2. Step 2: Evaluate a.equal?(b)

    Though content is same, a and b are different string objects, so equal? returns false.
  3. Final Answer:

    true false -> Option B
  4. Quick Check:

    == compares content, equal? compares object identity = C [OK]
Hint: == checks value, equal? checks same object [OK]
Common Mistakes:
  • Assuming equal? returns true for identical strings
  • Confusing output order
  • Thinking == checks object identity
4. Consider this Ruby code snippet:
arr1 = [1, 2, 3]
arr2 = arr1
arr3 = [1, 2, 3]

puts arr1.equal?(arr2)
puts arr1.equal?(arr3)
What is the output and why?
medium
A. false false
B. false true
C. true true
D. true false

Solution

  1. Step 1: Analyze arr1.equal?(arr2)

    Since arr2 is assigned directly from arr1, both point to the same object, so equal? returns true.
  2. Step 2: Analyze arr1.equal?(arr3)

    arr3 is a new array with the same content but a different object, so equal? returns false.
  3. Final Answer:

    true false -> Option D
  4. Quick Check:

    Same object = true, same content but different object = false [OK]
Hint: Assignment copies object reference; new array creates new object [OK]
Common Mistakes:
  • Assuming arrays with same content are the same object
  • Confusing == with equal?
  • Thinking assignment creates a new object
5. You want to check if two variables x and y refer to the same object, but x might be nil. Which Ruby code safely performs this check without errors?
hard
A. x.equal?(y)
B. y.equals(x)
C. x&.equal?(y)
D. x == y

Solution

  1. Step 1: Check safety of equal? on nil

    In Ruby, nil is an object and responds to equal?, so x.equal?(y) is safe even if x is nil. It returns false unless y is also nil.
  2. Step 2: Eliminate distractors

    x&.equal?(y) returns nil if x is nil, which is not a proper boolean result. y.equals(x) calls a non-existent method. x == y checks content, not identity.
  3. Final Answer:

    x.equal?(y) -> Option A
  4. Quick Check:

    nil.equal?(y) safe boolean check = C [OK]
Hint: Even nil.equal?(other) works without error [OK]
Common Mistakes:
  • Using &. which returns nil instead of boolean
  • Calling non-existent equals method
  • Using == which checks content, not identity
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard