常量池,为了方便重复创建相同常量值的对象而出现的。常量池相当于一个内存空间,存在于方法中。
按照代码顺序,先在常量池中创建‘abc’,再将‘abc’指向s1,创建s2时,直接将常量池中存在的‘abc’指向s2;
“==”在这里比较的是对象引用;
String 中的equals方法经过重写后操作为“比较此字符串与指定的对象,当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true”。
通过 new 来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
“ String s1=new String(“abc”)”语句创建了几个对象?
该语句首先String s1是声明,new String(“abc”)先在常量池中查找,若没有则创建“abc”,而后通过new在堆内存中创建对象,把“abc”拷贝赋值。String 定义为初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。故创建常量池和堆内存中两个对象,两个对象的地址值不一样。
字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的,字符串转换是通过 toString 方法实现的。
网友评论