1.String
s1 = "h"
s2 = "h"
s1 == s2 为true,"h"存储在数据区,s1,s2虽然是引用变量,可是指向同一块区域
s1 = new String("h");
s2 = new String("h");
s1 == s2 为false,因为是new出来的,两个"h"在堆内存区域占两块区域
这也体现了堆内存区域和数据区域的区别,数据区如果是相同的值不会重新开辟区域,更优化
s1.equals(s2) 为true,object的equals方法比较的是两个变量的引用地址,而String重写了equals方法,优化之后,比较的是引用变量所指向的值 String的常用方法 public String[] split(String regex)
2.StringBuffer
String是不可变的字符序列,而StringBuffer是可变的
s1 = s1 + s2,在内存中重新开辟一块区域,将s1,s2的内容分别放进这块内存,组合成一串字符序列,然后再让s1指向它,这是一个静态的过程
StringBuffer则不同,初始化16个字符,当原来的空间不足时,动态扩大容量
|