字符串创建与存储的机制
在java语言中,字符串起着非常重要的作用,字符串的声明有如下两种情况:
1,String s1 = new String("abc");与String s2 = new String("abc");存在两个引用对象s1,s2.两个内容相同的字符串对象abc,他们的内存地址不同,只要用到new总会生成新的对象。
2,String s1 = "abc",String s2 = "abc".在JVM中存在一个字符串常量池。其中保留着很多的字符串对象,并且可以被共享使用。s1,s2引用的是字符串常量池中的同一个对象。。
String的实现是采用Flyweight的设计模式。当创建一个字符串常量时。首先会在字符串常量池中寻找,看是否有相同的字符串常量,其判断依据是String的equals(Object)方法。如果没有,创建字符串对象,并把它加入到字符串池中。再将它的引用返回。String类是不可变类,一旦创建就不能被修改。String对象可以被共享。
String类型的引用s进行赋值。s=null与s=“ ”一样吗??
s是一个字符串类型的引用。s=null表示他不指向任何一个字符串。s=“ ”;表示他指向另一个字符串。并且这个字符串是空字符串。
new String(“abc”)创建了几个对象
答:一个或两个。当字符串池中有“abc”时:表示他只创建了一个对象。如果字符串池中没有“abc”,那么他创建了两个对象。