问:
String greeting="Hello",现如果希望将greeting的内容修改为“Help!”,故greeting=greeting.substring(0,3)+"p!";,在此过程中共产生了多少内存地址?
答:
此过程中共产生了4个内存地址。
解释:
java规定不能修改字符串中的字符,所以Java里将String类对象称为不可变字符串,例“Hello”永远包含字符H、e、l、l、和o的代码单元序列,不能修改其中的任何一个字符;但是字符串变量是可以修改的,比如greeting可以引用另一个字符串,此时greeting存放的地址为另一个字符串的地址,原来的“Hello”依然存在。如下图:
由于字符串是不可变的,每产生一个内容不同的字符串就必须产生一个新的内存地址存储它。所以在此题中,“Hello”占用了一个内存地址;greeting.substring(0,3)语句将greeting的“Hel”提取出来,故“Hel”占用一个内存地址;“p!”占用一个内存地址;通过“+”将“Hel”和"p!"拼接成“Help!”,并让greeting引用“Help!”,“Help!”也占用一个新的内存地址。
故在此题中,共产生了四个内存地址,分别存放“Hello” “Hel” "p!" "Help!"。