String update problem
To all,
I was working with a String parameter which would be altered during
various method calls; an example code as belows:
public class BlockMatchSimulation
{
class InnerBlock
{
public String mName;
}
public void replaceString (String pName, String pDelim, String
pNewValue)
{
pName=pName.replaceAll (pDelim, pNewValue);
}
public void appendString (String pName, String pSurName)
{
pName=pName+" "+pSurName;
}
public void replaceString (InnerBlock pObj, String pDelim, String
pNewValue)
{
pObj.mName=pObj.mName.replaceAll (pDelim, pNewValue);
}
public void appendString (InnerBlock pObj, String pSurName)
{
pObj.mName=pObj.mName+" "+pSurName;
}
public static void main (String[] pArgs)
{
String aName="Joseph";
BlockMatchSimulation aObj=new BlockMatchSimulation ();
BlockMatchSimulation.InnerBlock aIObj=aObj.new InnerBlock ();
aIObj.mName=aName;
// direct string handling
aObj.replaceString (aName, "ep", "");
aObj.appendString (aName, "House");
System.out.println ("Name is : "+aName);
// object level handling
aObj.replaceString (aIObj, "ep", "");
aObj.appendString (aIObj, "House");
System.out.println ("Name in the Object : "+aIObj.mName);
}
}
the output is :
Name is : Joseph
Name in the Object : Josh House
I was wondering why if I use the String parameter directly and called
the replaceString and appendString --> the updated value is not
returned!
On the other hand, it works perfectly when I encapsulate the String
field within an object.... why is it so?
As I remember String in java is handled by the JVM in a different way
(ie. String/literal pooling); is this the reason for such strange
behaviour?
From Jason (Kusanagihk)