Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String and Final

What is difference between in the following statements

String name = "Tiger";  final String name ="Tiger"; 

Although the String class is final class, why do we need to create a String "CONSTANT" variable as final?

like image 570
B. S. Rawat Avatar asked May 17 '09 16:05

B. S. Rawat


People also ask

Can we use final with string?

String class is final. This means you can't inherit from it. The variable "name" is final, meaning that you can't change it to point to a different instance of String.

What is difference between string and final string in Java?

In Java, we know that String objects are immutable means we can't change anything to the existing String objects. final means that you can't change the object's reference to point to another reference or another object, but you can still mutate its state (using setter methods e.g).

Is a string immutable and final?

The string is one of the most used classes in any programming language. We know that String is immutable and final in Java. Java runtime maintains a String pool that makes it a special class.


2 Answers

final in this context means that the variable name can only be assigned once. Assigning a different String object to it again results in a compile error.

I think the source of the confusion here is that the final keyword can be used in several different contexts:

  • final class: The class cannot be subclassed.
  • final method: The method cannot be overridden.
  • final variable: The variable can only be assigned once.

See the Wikipedia article on final in Java for examples on each case.

like image 55
Ayman Hourieh Avatar answered Sep 29 '22 14:09

Ayman Hourieh


"final" means different things in the two cases.

The java.lang.String class is final. This means you can't inherit from it.

The variable "name" is final, meaning that you can't change it to point to a different instance of String. So a non-final String variable isn't a constant, because you could read it at two different times and get different values.

As it happens, Java string objects are also immutable. This means that you cannot modify the value which a particular String object represents. Compare this with an array - you can replace the first element of an array object with a different object, but you can't replace the first character of a String object with a different char. This is why String.replace() returns a new string - it can't modify the old one.

One reason that String is final is to prevent an instance of a subclass of String, which implements mutable behaviour, being passed in place of a String.

But whether you can modify a particular object, and whether you can assign a different object to a variable, are completely different concepts. One is a property of String objects, and the other is a property of String variables, which are references to String objects.

like image 45
Steve Jessop Avatar answered Sep 29 '22 15:09

Steve Jessop