不可变字符串
String类是不可变类,定义一个String类型的方法有两种:
String name=”java course”;
String name=new String(“java course”);
使用第一种方法时就使用了串池(String Pool)技术,而第二种方式是普通的创建对象的方式,所谓串池,是一段字符串的内存缓冲区。当创建字符串对象name时,JVM会检查name在串池中是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串name,否则将name指向串池中已存在的对象。
String str1="java course";
String str2="java course";
String str3=new String("java course");
System.out.println(str1==str2);
//结果输出为true
System.out.println(str1==str3);
//结果输出为false
System.out.println(str1.equals(str3));
//结果输出为true
因为str3是在堆内存中新生成的String对象,即str3指向不同于”java course“的内存空间,所以输出结果为false
另外,equals()方法是被String类重新实现了的与操作符==是不同的,后者比较的是两个对象在内存中存储的内存地址是否一样,而equals()方法仅仅是判断两个字符串的内容是否相同。
StringBuffer类和String类
StringBuffer类和String类一样,也用来表达字符串,单StringBuffer的内部实现方式和String不同,主要区别在于StringBuffer在进行字符串处理时,不生成新的对象,而是在原有的对象上做修改,因此,在实际应用中,如需要对一个字符串进行修改,则采用StringBuffer使用性能上要优于String类。