- String是引用类型!!
- String在设计之初,虚拟机就对它做了特殊的优化,将字符串保存在虚拟机内部的字符串常量池中。一旦我们要创建一个字符串,虚拟机会先去常量池中检查是否创建过这个字符串,若有则直接引用。String对象因为有了上述的优化,就要保证该对象自创建开始就不能改变!所以对字符串的任何变化都会创建新的对象!
- 如果想创建一个和字符串常量池中字符串一样的新字符串对象,可以通过new String()方法创建。
- 字符串的equals方法
两个字符串进行比较的时候,我们通常使用equals方法进行比较,虽然java虚拟机对字符串做了优化,但是我们不能保证任何时候==都成立!(通过new String()方法创建的对象就不成立)。
- 当我们将一个字符串变量与一个字面量进行等值比较时,我们不要去调用变量的.equals方法。而是应该调用字面量的.equals方法。这样是为了避免调用.equals方法报空值针异常,因为我们不能保证变量是否为null,所有我们将不确定是否为null的值放入equals方法的参数中。
- StringBuilder
/**
* StringBuilder该类对于某个字符串频繁的编辑操作
* 使用StringBuilder可以在大规模修改字符串时不开辟新的字符串对象,从而节约内存资源。
* 所以,对已有着大量操作字符串的逻辑中,不应使用String而应该使用StringBuilder。
*/
public class StringBuilderTest {
public static void main(String[] args){
StringBuilder stringBuilder=new StringBuilder("I");
String string=stringBuilder.toString();//I
System.out.println(string);
//追加字符串
stringBuilder.append("love").append(" java!");
System.out.println(stringBuilder.toString());//Ilove java!
//插入字符串
stringBuilder.insert(1," ");
System.out.println(stringBuilder.toString());//I love java!
//替换字符串
stringBuilder.replace(2,6,"hate");
System.out.println(stringBuilder.toString());//I hate java!
//删除字符串
stringBuilder.delete(6,stringBuilder.length());
System.out.println(stringBuilder.toString());//I hate
//字符串反转
stringBuilder.reverse();
System.out.println(stringBuilder.toString());//etah I
}
}
- StringBuilder与StringBuffer
- 效果是一样的
- 区别:StringBuilder不是线程安全的,StringBuffer是线程安全的。
- 在多线程操作的情况下用StringBuffer,因为StringBuffer是线程安全的;它难免要顾及线程安全问题,而进行必要的安全验证操作,所以效率上比StringBuilder低。根据实际情况选择使用。
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。