遇到个奇怪的有关问题,求人指点下

遇到个奇怪的问题,求人指点下。
class conString {


private String school;
private String mldn;


public conString() {


}
public void changeStr() {
String s=this.mldn.replaceAll("JAVA","J2EE");//替换mldn中的JAVA值为J2EE
this.mldn=s;
}

}


以上代码可以把mldn中的值“JAVA”替换为“J2EE”。
但是如果
String s=this.mldn;
s.replaceAll("JAVA","J2EE");
或者使用
this.mldn.replaceAll("JAVA","J2EE");
s中的值却不会被替换为J2EE,仍旧是JAVA。
思来想去也搞不明白是为什么啊。
是和内存地址有关吗?
位置调用方法成功了,值却没有变换呢。
------解决方案--------------------
String对象的replace、subString方法返回的是替换、截取后的新字符串,并不是修改原字符串内容。