Strings

Strings are the most commonly used type in real-world Java. Every user input, every file name, every database query, every error message — they're all strings. In this lesson, you'll learn to search, compare, split, format, and efficiently build strings. You'll also learn the #1 Java gotcha : why == doesn't work for comparing strings.

Learn Strings in our free Java course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick reference.

Part of the free Java course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.

💡 Real-World Analogy

A String is like a necklace of letter beads . Each bead is a character, and you can examine them, count them, or create a new necklace — but you can never change the beads on an existing necklace . Every "change" actually creates a brand new necklace. This is called immutability .

You create strings by wrapping text in double quotes. You can combine strings using the + operator (concatenation):

Immutability means once a String is created, it can never be changed . Every method that seems to "modify" a string actually creates a brand new string and returns it. The original is untouched.

Java also maintains a String Pool — a special memory area that reuses identical string literals:

🔑 This is why == is unreliable for strings! It compares memory addresses, not content. Two strings can have identical text but be different objects in memory. Always use .equals() .

These are the methods you'll use every day. Memorize these and you'll handle 90% of string tasks:

This is the single most common bug Java beginners make. Let's be absolutely clear about it:

🔑 The rule: == checks "are these the exact same object in memory?" .equals() checks "do these contain the same text?" You almost always want .equals() .

Because strings are immutable, concatenation in a loop creates a new string object every iteration . For large loops, this wastes massive amounts of memory. Use StringBuilder instead:

💡 Rule of thumb: If you're concatenating in a loop, use StringBuilder. For a few simple concatenations outside loops, regular + is fine.

Instead of ugly concatenation with lots of + signs, use String.format() for readable, clean string construction:

Here are patterns you'll use constantly in real Java applications:

💡 Use .equalsIgnoreCase() for user input — users might type "YES", "Yes", or "yes".

💡 Use .strip() instead of .trim() (Java 11+) — it handles Unicode whitespace properly.

💡 Use String.format() for readable string construction instead of chaining + operators.

💡 Java 15+ text blocks: Use """multi-line text""" for SQL queries, HTML, and JSON.

💡 String.join() is your friend: String.join(", ", list) is cleaner than manual loops.

You now know how to create, compare, search, split, format, and efficiently build strings in Java! Strings appear in virtually every Java program — from parsing user input to building SQL queries to formatting log messages.

Next up: Object-Oriented Programming — learn to design classes and objects, the foundation of all Java applications.

Practice quiz

What does it mean that Strings are immutable?

  • They can be changed in place
  • They are always empty
  • Once created, a String can never be changed
  • They cannot be printed

Answer: Once created, a String can never be changed. Immutable means a String never changes; methods like toUpperCase return a brand-new String.

Which is the correct way to compare two Strings' text content?

  • s1.equals(s2)
  • s1 == s2
  • s1 = s2
  • s1.compare(s2)

Answer: s1.equals(s2). Use .equals() to compare content; == compares object references.

What does "Hello, World!".length() return?

  • 12
  • 11
  • 14
  • 13

Answer: 13. Counting all characters including the comma, space, and !, the length is 13.

What does "Hello, World!".substring(7) return?

  • "World"
  • "World!"
  • ", World!"
  • "Hello, "

Answer: "World!". substring(7) returns everything from index 7 to the end: "World!".

What does name.toUpperCase(); do if you do NOT assign the result?

  • Nothing useful — the new String is discarded
  • Changes name in place
  • Throws an error
  • Returns null

Answer: Nothing useful — the new String is discarded. Strings are immutable, so the new uppercase String is thrown away unless you store it.

What does System.out.println("Score: " + 5 + 3); print?

  • Score: 8
  • Score: 5 3
  • Score: 53
  • 8

Answer: Score: 53. Left-to-right, "Score: " + 5 makes a String, then + 3 appends '3', giving "Score: 53".

Why use StringBuilder instead of += inside a large loop?

  • It is the only way to concatenate
  • += creates a new String each iteration, wasting memory
  • StringBuilder is immutable
  • It sorts the text

Answer: += creates a new String each iteration, wasting memory. Because Strings are immutable, += makes a new object every iteration; StringBuilder uses one mutable buffer.

What does "yes".equals(input) return when input is null?

  • true
  • It throws NullPointerException
  • null
  • false (no crash)

Answer: false (no crash). Putting the constant first is null-safe: it returns false instead of throwing NullPointerException.

What does "Hello".indexOf("ll") return?

  • 1
  • 2
  • 3
  • -1

Answer: 2. "ll" starts at index 2 in "Hello".

Which format specifier prints a floating-point number to 2 decimal places?

  • %d
  • %s
  • %.2f
  • %n

Answer: %.2f. %.2f formats a floating-point value with two decimal places.