String类没有提供修改一个已存在的字符串中的某一个字符的方法,例如:String greeting="Hello";如果想把greeting变成"Help!",不能直接把greeting的最后一位变成'p'和'!',而是保留需要的字符串,将替换的字符串通过"+"连接在一起。
greeting=greeting.substring(0,3)+"p!";
String类是不可改变的,就像数字3就是3,字符串"Hello"总是包含H,e,l,l,o等字符的有序集合,这些字符是不能改变的,只能通过改变变量greeting的内容,使它指向另一个不同的字符串。
这样是否会导致效率降低?只改变某些字符看起来比创建一个新的字符串简单,事实上,重新生成字符串,并且把"Hel"和"p!"拼接起来,并不会影响效率。因为String有一个巨大的优点:编译器将字符串设置为共享的。可以想象到,许多字符串存放在一个公共的池中。String变量指向池中的某一个位置。如果拷贝一个String变量,那么原来的变量和新的变量都指向同一个字符串。
这里所说的共享同一个字符串,是对字符串常量来说的,对于substring或者+来说,并不适用。