Courseiva
Primitives, Strings and OperatorshardMultiple ChoiceObjective-mapped

String Comparison: == vs equals() with Interning

A method returns a String. The team debates using == vs equals(). Which correctly describes String comparison in Java?

Quick Answer

The correct answer is that == may return true for two different references if they point to the same interned string. This happens because the == operator in Java compares object references, not the actual content of the strings. However, due to string interning, when you create a string literal, Java automatically stores it in a common pool; any other literal with the same value will reference that same pooled object, making == return true even though the variables are technically separate references. On the Oracle Java Foundations 1Z0-811 exam, this concept tests your understanding of reference equality versus value equality, and it’s a classic trap where developers mistakenly believe == compares string content. The exam expects you to recognize that equals() compares the actual characters, while == only compares memory addresses, with interning being the one exception that can mislead you. Memory tip: think of == as checking “are they the same object in memory?” and equals() as checking “do they say the same thing?”

⚠ Common exam trap

Test-takers frequently assume == always compares references and never returns true for equal content, but they forget about string interning, which can cause == to return true for two different references pointing to the same interned string.

Answer choices

Why each option matters

Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.

Correct answer & explanation

== may return true for two different references if they point to the same interned string.

The == operator in Java compares object references, not content. However, due to string interning, two different String variables that reference the same interned string literal will have the same memory reference, causing == to return true. This is a special case that can mislead developers into thinking == compares content.

Answer analysis

Option-by-option breakdown

For each option: why learners choose it and why it is or isn't the right answer here.

  • == compares the content of two Strings.

    Why it's wrong here

    == compares references, not content.

  • == always returns false for different String objects, even if content is same.

    Why it's wrong here

    Interned strings may be same object.

  • equals() compares the memory addresses.

    Why it's wrong here

    equals() compares content.

  • == may return true for two different references if they point to the same interned string.

    Why this is correct

    String literals are interned; == can be true for same literal.

About these practice questions

One of 481 original 1Z0-811 practice questions on Courseiva, each with a full explanation and wrong-answer analysis — not exam dumps or protected exam content. Learn why practice questions differ from exam dumps →

How Courseiva writes practice questions · Editorial policy

Same concept, more angles

2 more ways this is tested on 1Z0-811

These questions test the same concept from different angles. Work through them to make sure you can recognise it however the exam phrases it.

Variation 1. Which operator is used to compare two values for equality in Java?

easy
  • A.equals()
  • B.==
  • C.!=
  • D.=

Why B: The == operator in Java is used to compare two primitive values for equality, returning true if they are equal. For reference types, == compares object references (memory addresses), not the actual content. This is a fundamental operator defined in the Java Language Specification (JLS §15.21) for equality testing.

Variation 2. A developer is implementing a login verification method that compares a user-entered password against a stored hash. The passwords are stored as String objects. Which approach ensures correct comparison?

medium
  • A.if (enteredPassword.compareTo(storedHash) == 0)
  • B.if (enteredPassword.equals(storedHash))
  • C.if (enteredPassword == storedHash)
  • D.if (enteredPassword.hashCode() == storedHash.hashCode())

Why B: Option B uses equals(), the standard method for comparing string content, correctly checking character sequences. Option A uses compareTo(), which is intended for ordering; although compareTo() == 0 indicates equality, it is not the idiomatic approach and is considered a trap. Option C uses ==, comparing references, not content. Option D uses hashCode(), which may collide and does not guarantee equality.

JA

Written by Johnson Ajibi, MSc IT Security

Senior Network & Security Engineer · founder of Courseiva

This 1Z0-811 practice question is part of Courseiva's free Oracle certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the 1Z0-811 exam.