>
> I've seen written in several places that JAVA Strings are
> "Immutable" eg. Constant, unchanging. And that if you declare
> several identical String Variables, without using NEW, Java points
> all the variables at the same object.
>
> One would then suppose:
> 1) If three variables are all references to a single object,
> changing the value of one of them would change all of them.
> 2) Of course, Strings are Immutable, so attempting to change it's
> value should throw a compile-time error.
>
>
Hi;
To answer your points:
"If three variables are all references to a single object, changing the
value of one of them would change all of them."
Strings don't behave like other objects.
Let's say we declare 2 strings like so:
String s = "abcdef";
String s2 = s;
So far, we won't encounter any difference between String and other object
behaviour. We've created 1 String object and 2 references to the same
object.
BUT (here's where a String acts differently!) if we were to say:
s = s.concat("append this");
You MIGHT expect s and s2 to still be pointing to the same String object.
BUT if you say System.out.print(s) you get 'abcdefappend this' and if you
say System.out.print(s2) you get 'abcdef'.
The code s = s.concat("append this") caused the JVM to create a NEW string
object and give it the value "abcdefappend this".
Then the reference variable s was switched to refer to this new object,
while s2 still refers to the original string.
So we end up with 2 Strings and 2 reference variables.
Thus the String is immutable, and its value cannot change under any
circumstances but the reference variables are not immutable.
BTW, if you just say:
String name = "Fred";
name = "Barney";
Then again you'll end up with 2 separate strings only now you don't have a
reference to the original "Fred". It's content still hasn't changed (it's
immutable right!) but its lost and will now be a candidate for garbage
collection!!
"Of course, Strings are Immutable, so attempting to change it's value should
throw a compile-time error."
There will not be any compile time errors. You can write code to change a
String, but you won't EVER really be changing its value. You'll be creating
new Strings and changing the contents of the relevant references.
Paul Wilkin
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/javaprogrammingwithpassion?hl=en