Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the benefits of using identical String literals instead of a final variable?

Tags:

java

string

final

I've come across a class that includes multiple uses of a string literal, "foo".

What I'd like to know, is what are the benefits and impact (in terms of object creation, memory usage and speed) of using this approach instead of declaring the String as final and replacing all the literals with the final variable?

For example (although obviously not a real word usage):

private static final String FINAL_STRING = "foo";  public void stringPrinter(){     for(int i=0;i<10;i++){         System.out.println(FINAL_STRING);     } } 

Versus:

public void stringPrinter(){     for(int i=0;i<10;i++){         System.out.println("foo");     } } 

Which is preferable and why (assuming the string value will remain constant)?

Would the above (second) example result in 10 String objects being created or would the JVM realise that only a single literal is actually used, and create a single reference. If so, is there any advantage for declaring the String as final (as in the first example)?

If the interpreted code does replace the string literal with a single reference, does that still apply if the same literal occurs in more than one place:

public void stringPrinter(){     for(int i=0;i<5;i++){         System.out.println("foo"); // first occurence         System.out.println("foo"); // second occurence     } } 
like image 965
Michael Avatar asked Jan 28 '11 16:01

Michael


People also ask

What is the benefit of using variables instead of literals?

A literal is a value that is expressed as itself. For example, the number 25 or the string "Hello World" are both literals. A variable in a program can change its value during the course of execution of the program.

What is the difference between a string variable and a string literal?

The main difference between String Literal and String Object is that String Literal is a String created using double quotes while String Object is a String created using the new() operator. String is a set of characters.

What is special about a string literal?

A "string literal" is a sequence of characters from the source character set enclosed in double quotation marks (" "). String literals are used to represent a sequence of characters which, taken together, form a null-terminated string. You must always prefix wide-string literals with the letter L.

Which is better string literal or string object?

When you use a string literal the string can be interned, but when you use a new String("...") you get a new string object. In general, you should use the string literal notation when possible. It is easier to read and it gives the compiler a chance to optimize your code.


1 Answers

They will be exactly the same. The literal is interned (any compile time constant expression that results in that string shares the same instance as all other constants/literals) in both cases and a smart compiler+runtime should have no trouble reducing both to the most optimized example.

The advantage comes more in maintainability. If you want to change the literal, you would need only change one occurrence with a constant but you would need to search and change every instance if they were included inline.

like image 103
Mark Peters Avatar answered Oct 09 '22 17:10

Mark Peters