StringBuilder and StringBuffer help you change text without making new copies every time. This saves memory and makes your program faster.
StringBuilder and StringBuffer in Java
StringBuilder sb = new StringBuilder(); sb.append("Hello"); String result = sb.toString();
StringBuilder is faster but not safe for programs running many parts at once.
StringBuffer is slower but safe for programs running many parts at once.
StringBuilder sb = new StringBuilder(); sb.append("Hi"); sb.append(" there"); System.out.println(sb.toString());
StringBuffer sbf = new StringBuffer("Start"); sbf.append(" and continue"); System.out.println(sbf.toString());
StringBuilder sb = new StringBuilder(); sb.append("Count: "); for(int i=1; i<=3; i++) { sb.append(i).append(", "); } System.out.println(sb.toString());
This program shows how to add text pieces using StringBuilder and StringBuffer, then prints the results.
public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(", "); sb.append("World!"); System.out.println(sb.toString()); StringBuffer sbf = new StringBuffer("Java"); sbf.append(" is fun"); System.out.println(sbf.toString()); } }
Use StringBuilder when you do not need to worry about multiple parts running at the same time.
Use StringBuffer if your program changes text from many parts at once to avoid errors.
Both classes help avoid creating many new strings, which saves memory and time.
StringBuilder and StringBuffer let you build and change text efficiently.
StringBuilder is faster but not thread-safe; StringBuffer is thread-safe but slower.
Use them when you need to change text many times instead of using normal strings.
Practice
Which of the following statements about StringBuilder and StringBuffer is true?
Solution
Step 1: Understand thread safety difference
StringBufferis synchronized, making it thread-safe but slower.Step 2: Understand performance difference
StringBuilderis not synchronized, so it is faster but not thread-safe.Final Answer:
StringBuilderis faster but not thread-safe, whileStringBufferis thread-safe but slower. -> Option BQuick Check:
Thread safety and speed = A [OK]
- Confusing which class is thread-safe
- Thinking both have same speed
- Believing they cannot modify strings
Which of the following is the correct way to create a StringBuilder object with initial content "Hello"?
Solution
Step 1: Check constructor syntax
The correct way to create aStringBuilderwith initial content is usingnew StringBuilder("Hello").Step 2: Verify other options
StringBuilder sb = StringBuilder("Hello"); missesnew, StringBuilder sb = new StringBuilder(); sb.append("Hello"); is valid but not direct initialization, StringBuilder sb = new StringBuffer("Hello"); uses wrong class.Final Answer:
StringBuilder sb = new StringBuilder("Hello"); -> Option DQuick Check:
Correct constructor syntax = D [OK]
- Omitting 'new' keyword
- Using StringBuffer instead of StringBuilder
- Trying to assign without constructor
What is the output of the following code?
StringBuilder sb = new StringBuilder("Java");
sb.append(" Programming");
sb.replace(0, 4, "Python");
System.out.println(sb.toString());Solution
Step 1: Append " Programming" to "Java"
After append, string becomes "Java Programming".Step 2: Replace characters from index 0 to 4 with "Python"
Characters "Java" (index 0 to 4) are replaced by "Python", resulting in "Python Programming".Final Answer:
Python Programming -> Option CQuick Check:
Append + replace result = A [OK]
- Confusing replace indices
- Thinking append replaces text
- Ignoring toString() output
Identify the error in the following code snippet:
StringBuffer sb = new StringBuffer("Test");
sb.insert(5, "ing");
System.out.println(sb);Solution
Step 1: Check insert index validity
StringBuffer length is 4 ("Test"), but insert index is 5, which is out of bounds.Step 2: Understand exception thrown
Inserting at index greater than length throws IndexOutOfBoundsException.Final Answer:
IndexOutOfBoundsException because insert index is invalid -> Option AQuick Check:
Invalid insert index = B [OK]
- Assuming insert auto-corrects index
- Confusing insert with append
- Expecting no error on invalid index
You want to build a thread-safe string that appends numbers 1 to 3 separated by commas, resulting in "1,2,3". Which code snippet correctly uses StringBuffer to achieve this?
1. StringBuffer sb = new StringBuffer();
for (int i = 1; i <= 3; i++) {
sb.append(i);
if (i != 3) sb.append(",");
}
System.out.println(sb.toString());
2. StringBuffer sb = new StringBuffer();
for (int i = 1; i <= 3; i++) {
sb.append(i + ",");
}
System.out.println(sb.toString());
3. StringBuffer sb = new StringBuffer();
sb.append("1,2,3,");
System.out.println(sb.toString());
4. StringBuffer sb = new StringBuffer();
for (int i = 1; i < 3; i++) {
sb.append(i);
sb.append(",");
}
System.out.println(sb.toString());Solution
Step 1: Analyze snippet 1
Appends numbers 1 to 3 with commas except after last number, producing "1,2,3" correctly.Step 2: Check other snippets
Snippet 2 adds extra comma at end; snippet 3 hardcodes string but adds extra comma; snippet 4 misses last number 3.Final Answer:
Code snippet 1 -> Option AQuick Check:
Correct comma placement in loop = C [OK]
- Adding extra comma at end
- Missing last number in loop
- Hardcoding string without loop
Ready to prove it?
Pass the test and this pattern moves unknown
