Tag Archives: StringWriter

How to compare Strings in Java and more about Strings

Yes, I will be talking about one of the favorite topics or may be the most argued topic of strings in programming languages. This post will not cover any other programming languages, but Java.


One of the beginner question in Java is how to compare Strings in java?


Short answer is .equals compare the values of two strings and see if they are equal or not. Operator == compare the two string objects and see if they are referring to same memory address.


String str1 = new String(“test”);

String str2 = new String(“test”);

str1.equals(str2) – This will return true.

str1 == str2 – This will return false.


Despite Java supports operator == for strings, it is not used for string comparison often. Object reference check happens rarely. Another anomaly to this is if two strings are null.


String str1 = null;

String str2 = null;

str1 == str2 – this will return true.

str1.equals(str2) – this will throw null pointer exception (NPE).

Java offers another method called compareTo for String comparison. This can be used in following way


String str1 = “test”;

String str2 = “test”;

str1.compareTo(str2) == 0 – This will return true.

More about Strings

We all have seen StringBuffer, StringBuilder, StringWriter, StringTokenizer or just plain String. What are all these different aspects of String and when to use? Isn’t this too much to know when you just want to use a simple String object. This post will cover some information about all these different classes that Java offers.


StringBuffers are thread-safe, they are just synchronized version of StringBuilder. StringBuffer offers some helpful methods like append and reverse.


StringBuffer sb = new StringBuffer();

sb.append(“first string”);



StringBuilder are not thread-safe, but they offer better performance than StringBuffer. You can say StringBuffer are thread-safe version of StringBuilder.


StringTokenizer is completely different from StringBuffer and StringBuilder as it is mainly used for splitting strings into token at a delimiter. StringBuffer and StringBuilder are used to build strings.


StringWriter is a character stream that collects the output in a string buffer. In short, you can say it uses StringBuffer underneath. This is an IO stream, very similar to File IO, but you can still access StringWriter even after stream has been closed.


StringWriter sw = new StringWriter();

sw.write(“this is first string”);



In this article, we showed String comparison and different forms of String building.