Previous | Next | Trail Map | Writing Java Programs | The String and StringBuffer Classes

Strings and the Java Compiler

The Java compiler uses the String and StringBuffer classes behind the scenes to handle literal strings and concatenation.

Literal Strings

In Java, you specify literal strings between double quotes:
"Hello World!"
You can use literal strings anywhere you would use a String object. For example, System.out.println accepts a String argument, so you could use a literal string in place of a String there.
System.out.println("And might I add that you look lovely today.");
You can also use String methods directly from a literal string.
int len = "Goodbye Cruel World".length();
Because the compiler automatically creates a new String object for every literal string it encounters, you can use a literal string to initialize a String.
String s = "Hola Mundo";
The above construct is equivalent to, but more efficient than, this one, which ends up creating two Strings instead of one:
String s = new String("Hola Mundo");
The compiler creates the first string when it encounters the literal string "Hola Mundo!", and the second one when it encounters new String.

Concatenation and the + Operator

In Java, you can use + to concatenate Strings together:
String cat = "cat";
System.out.println("con" + cat + "enation");
This is a little deceptive because, as you know, Strings can't be changed. However, behind the scenes the compiler uses StringBuffers to implement concatenation. The above example compiles to:
String cat = "cat";
System.out.println(new StringBuffer().append("con").append(cat).append("enation"));
You can also use the + operator to append values to a String that are not themselves Strings:
System.out.println("Java's Number " + 1);
The compiler converts the non-String value (the integer 1 in the example) to a String object before performing the concatenation operation.

Previous | Next | Trail Map | Writing Java Programs | The String and StringBuffer Classes