Comparing Objects

Caleb Thomas
7 min read
Study Guide Overview
This guide covers object equality in Java, focusing on the difference between the ==
operator (reference comparison) and the .equals()
method (content comparison). It explains how to compare Strings and other objects, including custom classes. It also provides practice questions and exam tips for the AP Computer Science A exam.
#Object Equality in Java: A Last-Minute Guide
Hey there, future AP Computer Science A rockstar! Let's get this object equality thing crystal clear before the big day. It's a topic that can trip people up, but with this guide, you'll be comparing like a pro. Let's dive in!
# The Pitfalls of ==
with Objects
Understanding object equality is crucial for both multiple-choice and free-response questions. It's a concept that often appears in different contexts throughout the exam.
When we talk about object equality in Java, it's not as straightforward as comparing numbers. The ==
operator checks if two object references point to the exact same object in memory. Think of it like checking if two people are the same person, not just if they look alike.
==
operator: Compares memory locations (references), not the actual content of objects.- Analogy: Imagine two identical twins. They look the same (same content), but they are two different people (different objects in memory). The
==
operator would say they are not the same.
Here's a breakdown with String
examples:
java
String a = "Hi";
String b = "Hi";
String c = a;
String d = "Hi!";
String e = new String("Hi");
System.out.println(a == c); // true
System.out.println(d == b); // false
System.out.println(a == b); // true
System.out.println(a == e); // false
Let's break down why we get these results:
-
a == c
(true):c
is assigned the same reference asa
. They point to the same object in memory. -
d == b
(false):d
andb
are differentString
objects with different contents. -
a == b
(true): Java's string pool reuses the same object for string literals. Botha
andb
refer to the same object. -
a == e
(false):e
is created using thenew String()
constructor, creating a new object in memory, even though it has the same content asa
.
A common mistake is thinking ==
compares the content of objects. It only checks if the references are the same. Always use .equals()
to check for content equality.
# The Power of .equals()
The .equals()
method is your go-to for comparing the content of objects. It checks if the attributes of two objects are the same, even if they are different objects in memory.
.equals()
method: Compares the content of objects (based on how the class defines it).- Analogy: Using the twins analogy,
.equals()
would check if the twins have the same DNA (same content), even though they are different individuals.
Here's how it works with the same String
examples:
java
String a = "Hi";
String b = "Hi";
String c = a;
String d = "Hi!";
String e = new String("Hi");
System.out.println(a.equals(c)); // true
System.out.println(d.equals(b)); // false
System.out.println(a.equals(b)); // true
System.out.println(a.equals(e)); // true
Notice the differences:
-
a.equals(c)
(true): Same as==
because they are the same object. -
d.equals(b)
(false): Same as==
because the contents are different. -
a.equals(b)
(true): Same as==
because they have the same content and are the same object. -
a.equals(e)
(true): This is the key difference! Even thoughe
is a new object,.equals()
returnstrue
because the content ("Hi") is the same asa
.
The .equals()
method is defined in the Object
class and can be overridden by subclasses to define their own equality logic. For String
, .equals()
compares the sequence of characters.
#Important Notes
-
Primitive Types: You must use
==
to compare primitive types (int, double, boolean, etc.) because they are not objects. -
String Comparisons: Always use
.equals()
to compareString
objects. Only use==
if you need to check if it's the exact same string object in memory (which is rare). -
Custom Classes: If you create your own classes, you might need to override the
.equals()
method to define what it means for two objects of your class to be equal.
Mnemonic: "Content with .equals()
, Reference with ==
". Remember that .equals()
compares the content of objects, while ==
compares the references (memory locations).
# Final Exam Focus
Alright, let's focus on what's most important for the exam:
-
==
vs..equals()
: Know the difference inside and out. This is a frequent source of errors in both multiple-choice and free-response questions. -
String Comparisons: Be sure to use
.equals()
forString
comparisons unless you have a specific reason to check object identity with==
. -
Object Equality in Custom Classes: Understand that you might need to override
.equals()
in your own classes to define what equality means for your objects. -
Tracing Code: Practice tracing code that involves object comparisons to predict the output.
When you encounter a question involving object comparisons, ask yourself: "Am I comparing references or content?" If you're comparing content, use .equals()
. If you're comparing references, use ==
.
#Last-Minute Tips
- Don't Panic: Object equality can seem tricky, but with a clear understanding of the difference between
==
and.equals()
, you've got this! - Read Carefully: Pay close attention to the question. Does it ask for object identity or content equality?
- Practice, Practice, Practice: Work through examples and practice problems to solidify your understanding.
# Practice Questions
Practice Question
#Multiple Choice Questions
- Given the following code:
java
String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
What is the output?
(A) true true (B) true false (C) false true (D) false false
- Which of the following statements is true about the
==
operator and the.equals()
method when comparing objects in Java?
(A) ==
compares the content of the objects, while .equals()
compares the memory locations.
(B) ==
compares the memory locations, while .equals()
compares the content of the objects.
(C) Both ==
and .equals()
compare the content of the objects.
(D) Both ==
and .equals()
compare the memory locations.
- Consider the following code snippet:
java
Integer num1 = 100;
Integer num2 = 100;
Integer num3 = new Integer(100);
System.out.println(num1 == num2);
System.out.println(num1 == num3);
System.out.println(num1.equals(num3));
What will be the output?
(A) true true true (B) true false true (C) false true true (D) false false false
#Free Response Question
Question:
You are given a Student
class with name
(String) and id
(int) as instance variables. Implement the equals()
method for the Student
class such that two Student
objects are considered equal if they have the same id
. Also, write a main
method to test your implementation.
java
public class Student {
private String name;
private int id;
public Student(String name, int id) {
this.name = name;
this.id = id;
}
// Implement equals() method here
public static void main(String[] args) {
// Test your implementation here
}
}
Solution:
java
public class Student {
private String name;
private int id;
public Student(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Student student = (Student) obj;
return id == student.id;
}
public static void main(String[] args) {
Student student1 = new Student("Alice", 12345);
Student student2 = new Student("Bob", 67890);
Student student3 = new Student("Charlie", 12345);
System.out.println(student1.equals(student2)); // Output: false
System.out.println(student1.equals(student3)); // Output: true
}
}
Scoring Breakdown:
- Correct Method Signature (1 point): The
equals()
method has the correct signature:public boolean equals(Object obj)
. - Null Check (1 point): The method checks if the input object is
null
. - Type Check (1 point): The method checks if the input object is of the same class as the current object.
- Casting (1 point): The method correctly casts the input object to a
Student
object. - ID Comparison (2 points): The method correctly compares the
id
of the twoStudent
objects and returnstrue
if they are equal andfalse
otherwise. - Test Cases (2 points): The
main
method includes test cases that demonstrate the correct behavior of theequals()
method.
You've got this! Go ace that exam! 🚀
Explore more resources

How are we doing?
Give us your feedback and let us know how we can improve