前言

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. python类的内建方法

    研究email源码学到的 class test(): """Class for generating text/* type MIME documents."& ...

  2. nginx proxy_set_header设置、自定义header

    先来看下proxy_set_header的语法 语法: proxy_set_header field value; 默认值: proxy_set_header Host $proxy_host; pr ...

  3. Light OJ 1009

    题意: 给你一个二分图, (可能不连通) 求可能多的子集元素个数: 思路: 直接DFS 给二分图染色就有了, 统计联通块中个数, 去最大值相加即可. #include<bits/stdc++.h ...

  4. O(big oh) (big omega) (big theta)

    big oh big omega big theta more

  5. Ex 2_27 矩阵A的平方是A自乘后的乘积,即AA..._第三次作业

  6. reportNG定制化之失败截图及日志

    先从github上拉下 reportNg的源代码 reportng  拉下源码后我们使用IDEA进行导入 1.reportng.properties 增加部分类表项 这里我们直接在末尾添加 log=L ...

  7. js对数组中的数字排序

    1 前言 如果数组里面都是数字,如果用原生的sort,默认是按字符串排序的,不符合我们的要求 2 代码 方法1:添加Array的原生方法 Array.prototype.sort2 =function ...

  8. Modbus库开发笔记之六:Modbus RTU Master开发

    这一节我们来封装最后一种应用(Modbus RTU Master应用),RTU主站的开发与TCP客户端的开发是一致的.同样的我们也不是做具体的应用,而是实现RTU主站的基本功能.我们将RTU主站的功能 ...

  9. Confluence 6 启用和禁用 Office 连接器

    如果你希望限制访问 Office 连接器的所有组件或者部分组件,你可以禁用整个插件也可以禁用插件中的某个模块. 希望启用或禁用 Office 连接器模块: 进入  > 基本配置(General ...

  10. RemoveDuplicatesfromSortedList

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...