Using intern in java Strings -


i trying understand java's string class having hard time understanding situation described below.

consider following example snippet:

string x = new string("hey"); string y = "hey"; 

if use bool = y == x.intern(); variable bool equal true.

my question is:

when make declaration this:

string b = "h"; string = b.intern + "ey"; boolean x = == "hey"; 

x's value false when make a = (b + "ey").intern(); x's value true.

why won't x = true in second example? because declarations in first example not alike? if yes differences?

with first example:

string y = "hey"; 

java automatically interns string literals such (jls section 3.10.5):

moreover, string literal refers same instance of class string. because string literals - or, more generally, strings values of constant expressions (§15.28) - "interned" share unique instances, using method string.intern.

so when call x.intern(), interned copy of "hey", same object , == returns true.

but in second example, b.intern() method call evaluated @ runtime, , java's concatenation operator return new string (not interned), different object string literal "hey" (interned already), == returns false (different objects).

edit

to clear happens string concatenation, turn jls section 15.18.1:

the result of string concatenation reference string object concatenation of 2 operand strings. characters of left-hand operand precede characters of right-hand operand in newly created string.

the string object newly created (§12.5) unless expression compile-time constant expression (§15.28).

but, b.intern() + "ey"; not compile-time constant expression, resultant string object has not been interned, , == detect it's different object interned "hey".


Comments

Popular posts from this blog

javascript - DIV "hiding" when changing dropdown value -

Does Firefox offer AppleScript support to get URL of windows? -

android - How to install packaged app on Firefox for mobile? -