Java中的字符串是不可变字符。
也就是说,不能修改Java字符中的字符。如,“Hello” 永远包含字符H、e、l、l、o的代码单元序列,而不能修改其中的任何一个字符。但是可以修改字符串的变量,让它引用另外一个字符串。
不可变字符串有一个优点:编译器可以让字符串共享。
可以想象:各种字符串存放在公共的存储池中。字符串变量指向池中的相应位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。
只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。
Java设计者认为共享带来的高效率远远胜过于提取、拼接字符串所带来的低效率。
检测两个字符串(s和t)是否相等,用:s.equals(t)。如果相等返回true,否则,返回false;也可以使用:
if(s.compareTo(t)==0)
不过,使用equals看起来更清晰。
一定不要使用 == 运算符检测两个字符串是否相同。这个运算符只能确定两个字符串是否放在同一个位置。当然,如果字符串放置在同一个位置,它们必然相等。但是完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
如果虚拟机始终将相同的字符串共享,就可以使用==运算符检测是否相等。但实际上只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。
扫描二维码关注公众号,回复:
4882960 查看本文章