String和StringBuilder的区别
String和StringBuilder最大的区别就在于String是不可变的,具有不可变性,对String的各种操作都不会对本身产生影响,除非采取赋值的形式把变化的值重新赋给String,这就导致了,String的操作会产生很多中间值消耗内存,而StringBuffer的操作是直接在原来对象上进行操作的,比如:
//对String进行字符串拼接
//新建一个String对象压入栈中并指向常量池中的"hello"
String str = new String("hello");
System.out.println(str);//hello
//要想对String进行拼接,我们只能通过重新赋值的方式
//此时在堆中重新new String("hello,word");并将str指向新创建的位置
str = str+",world";
System.out.println(str);//hello,word
//对StringBuilder进行字符串拼接
//新建一个StringBuilder对象
StringBuilder strb = new StringBuilder("hello");
System.out.println(strb);//hello
//要想对StringBuilder进行拼接,我们只需要调用StringBuilder的append方法
//此时堆中原来new StringBuilder("hello");语句变为new StringBuilder("hello,word");
strb.append(",word");
System.out.println(strb);//hello,word
StringBuilder和StringBuffer的区别
由于StringBuilder和StringBuffer基本一样,所以String和StringBuilder的区别也同样是String和StringBuffer的区别,不再赘述。
StringBuilder和StringBuffer的区别就在于,StringBuffer具有线程安全,而StringBuilder不具备,因此,StringBuilder的执行效率要高于StringBuffer,而日常开发时对字符串的操作很少需要考虑线程安全问题,因此,开发常用StringBuilder。
执行效率:
StringBuilder>StringBuffer>String