前言

String和StringBuffer本质上都是修饰字符串的只是含义不同 StringBuffer叫做字符串缓冲区

首先看下string类的例子

public class Work1 {
public static void main(String[] args) {
String s = "hello";
String s1 = s.substring(3);
System.out.println(s==s1);//结果为false
}
}

在来看下StringBuffer类的例子

public class Work1 {

    public static void main(String[] args) {

       StringBuffer ab1 = new StringBuffer();
StringBuffer ab2 = ab1.append("hello");
System.out.println(ab1==ab2); //结果为true } }

在来看下二者的内存分布图如下:

根据内存分布图来看 String 除了直接String s="hello" 这种方式之外不会创建新的对象  其它的不管是通过方法返回的String类型还是直接利用构造函数创建出来的字符串还是通过变量拼接(二边只要有一个变量拼接)都需要创建新的对象

而StringBuffer通过StringBuffer里面的方法  操作 返回一个StringBuffer类型的变量跟原StringBuffer变量是相等的 。

String stt1 = new String("hello");
String stt2 = new String("world");
System.out.println(stt1+stt2); String stt1 = "hello"
String stt2 = new String("world");
System.out.println(stt1+"world"); //上面二种拼接都是可以的 //这种是可以拼接的
StringBuffer ab1 = new StringBuffer();
StringBuffer ab2 = ab1.append("hello");
System.out.println(ab2+"hello"); //这种是不可以拼接的
StringBuffer ab1 = new StringBuffer("abc");
StringBuffer ab2 = ab1.append("hello");
System.out.println(ab2+ab1);

最后总结三点不同:

1、String可以用+算术运算符拼接字符串(不管是二边有一个变量字符串还是都是常量字符串都可以拼接)StringBuffer不可以(除了二边只要有一个常量字符串对象就可以拼接  例如 ab2+"hello")
        2、String表示线程不安全 执行效率高 StringBuffer相反
        3、String对象中的值是不可变的    StringBuffer中的值是可变的(也就是可以通过方法修改原来的StringBuffer变量并赋值给一个新的StringBuffer变量 二者之间是相等的)

   4、String创建对象时可以String a = "abc" 但是 StringBuffer不能直接这样创建 需要StringBuffer pj1 = new StringBuffer("abc");

java中String和StringBuffer的区别的更多相关文章

  1. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  2. java中string stringbuilder stringbuffer 的区别

    1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...

  3. java中String、StringBuffer、StringBuilder的区别

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  4. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. Java基础——java中String、StringBuffer、StringBuilder的区别

    (转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...

  6. Java中String、StringBuffer和StringBuilder之间的区别

    String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...

  7. java中String与StringBuilder的区别

    相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE ...

  8. java中String、StringBuffer和StringBuilder的区别(简单介绍)

    简单介绍 java中用于处理字符串常用的有三个类: 1.java.lang.String 2.java.lang.StringBuffer 3.java.lang.StrungBuilder 三者共同 ...

  9. Java中String、StringBuffer、StringBuilder、StringTokenizer的区别

    Java语言中,有4个类可以对字符或字符串进行操作,它们是Character.String.StringBuffer.StringTokenizer,其中Character用于单个字符操作,Strin ...

随机推荐

  1. 设计模式C++学习笔记之十(Builder建造者模式)

      建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数.详细的还是看代码吧. 10.1.解释 ...

  2. JavaScript使用方法和技巧大全

        有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通Ja ...

  3. ABP后台服务之作业调度Quartz.NET

    一.简介 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活 ...

  4. Hibernate search使用示例(基础小结-注解方式)

    (对于项目环境配置,一直没怎么看过.这次经历里从基础环境搭建到hibernate search示例的完成) 1.首先创建project,选择了web project. 2.导入hibernate se ...

  5. Light OJ 1095

    题意: 给你 N 个数, 总共有 N! 种排列, 现在 要你统计前 M 个数 刚好 有K 个数 在原来的位置上 的排列个数 思路: 首先 M 中选 K C(m,k): 则 共 剩下 n - k 个数, ...

  6. jenkins 安装网址

    https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins

  7. Confluence 6 使用 Apache 和 mod_proxy 的基本配置

    在这些示例中,我们使用下面的信息: http://www.example.com/confluence - 你计划使用的 URL http://example:8090/ - Confluence 当 ...

  8. Confluence 6 浏览默认的 Decorators

    在任何时候,你都可以使用 "Site Layouts" 页面中的 "View Default" 来浏览默认的 decorator 文件.模板浏览器允许你查看使用 ...

  9. JAVA项目中常用的异常处理情况总结

    JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...

  10. Spark-SQL之DataFrame操作

    Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFra ...