String

 String类是final类故不可以继承,也就意味着String引用的字符串内容是不能被修改。String有两种实例化方式
   (1)直接赋值(例中,String str = "Hello";就是直接赋值实例化了)
   (2)使用new调用构造方法完成实例化;
String str = "Hello";srt:只有一个对象
String str2 = new String("abc");St2:有2个对象

public class LianXi2 {
public static void main(String[] args) {
String str = "Hello"; //引用str指向对象"Hello"
str = str + " World"; //引用str指向对象str + " World" (str + " World"是另外一个对象)
System.out.println("str=" + str);
}
}
 
     要注意的是:String类对象内容不能修改,但并不代表其引用不能改变,下面通过内存的分配图说明字符串不可改变的真正含义:
堆内存里面开辟了3个对象:"Hello"、"world!"和"hello world!"这个三个对象。str首先指向对象"Hello",经过拼接后,str指向对象"hello world!"。原来的内容并没有改变。
 因此,在以后的开发中,若要经常修改字符串的内容,请尽量少用String,因为字符串的指向“断开-连接”会大大降低性能;对于要经常修改内容的情况,建议使用:StringBuilder、StringBuffer。

stringbuffer:线程安全

stringbuilder:线程不安全(性能最高)

2个类的方法没什么区别

String&Stringbuffer&Stringbuilder性能测试

package cn.com.string;

/**
* StringBuliderTest
*
* @描述:StringBulider性能演示
*/
public class StringBuliderTest {
// 定义2个常量
private static final String base = "abc";
private static final int count = 2000000; /**
* 测试String性能方法
*/
public static void stringTest() {
long begin, end;
begin = System.currentTimeMillis(); // 开始时间
String test = new String(base);
for (int i = 0; i < count / 100; i++) {
test = test + "add";
}
end = System.currentTimeMillis(); // 结束时间
System.out.println("测试string所用时间:" + (end - begin));
} /**
* 测试stringbuffer性能方法
*/
public static void stringbufferTest() {
long begin, end;
begin = System.currentTimeMillis(); // 开始时间
StringBuffer test = new StringBuffer(base);
for (int i = 0; i < count; i++) {
test = test.append("add");
}
end = System.currentTimeMillis(); // 结束时间
System.out.println("测试StringBuffer所用时间:" + (end - begin));
} /**
* 测试stringbuilder性能方法
*/
public static void stringbuilderTest() {
long begin, end;
begin = System.currentTimeMillis(); // 开始时间
StringBuilder test = new StringBuilder(base);
for (int i = 0; i < count; i++) {
test = test.append("add");
}
end = System.currentTimeMillis(); // 结束时间
System.out.println("测试stringbuilder所用时间:" + (end - begin));
} /**
* mai方法
*
* @param args
*/
public static void main(String[] args) {
stringTest();
stringbufferTest();
stringbuilderTest();
} /**输出结果:
测试string所用时间:1114
测试StringBuffer所用时间:140
测试stringbuilder所用时间:63
*/
}

  

  

String&StringBuffer&StringBuilder区别的更多相关文章

  1. 转:String StringBuffer StringBuilder区别

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  2. String,StringBuffer,StringBuilder区别

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  3. Java中String/StringBuffer/StringBuilder区别(转)

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...

  4. String StringBuffer StringBuilder区别与联系

    java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder都是字符串类型,是Java中用于处理字符串常用的三个类.它们主要有以下区别 ...

  5. Java学习之String StringBuffer StringBuilder区别

    1.String:对象长度是不可变的,是线程安全. 2.StringBuffer:对象长度是可变的,是线程安全. 3.StringBuilder:对象长度是可变,不是线程安全.

  6. String,StringBuffer,StringBuilder区别(笔记)

    String类被final修饰,创建的对象为不可变对象,属于字符串常量. 而StringBuffer与StringBuilder创建的属于字符串常量. StringBuffer的方法大多用了Synch ...

  7. java中string , StringBuffer , StringBuilder 区别

    1.String String变量的值不能改变,如果要改变String变量的值,虚拟机首先会遍历方法区中的字符串常量,如果存在需要的值,则虚拟机直接把此常量值的地址分配给String变量,如果不存在这 ...

  8. String StringBuffer stringbuilder 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 字符串类 ,长度不可变. 字符串缓存器类, 长度可变, 线程安全, 字符串构造器类,长度 ...

  9. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

随机推荐

  1. 什么是obj文件?

    百度百科: 程序编译时生成的中间代码文件.目标文件,一般是程序编译后的二进制文件,再通过链接器(LINK.EXE)和资源文件链接就成可执行文件了.OBJ只给出了程序的相对地址,而可执行文件是绝对地址. ...

  2. JadClipse

    JadClipse 介绍:JadClipse是一个Eclipse插件,无缝地集成了Jad(快速Java反编译器)与Eclipse.通常,当打开一个类文件,类文件查看器将显示一个简短的API类的轮廓.如 ...

  3. serv-U 7以上版本pasv端口的设置及中文乱码问题

    利用serv-u架设ftp服务器已经是再常见不过了事情了,近日一朋友为图新鲜,弄了个7.4版本的新玩意儿,结果架设上去后,仅开了21端口,用LeapFtp在port模式下连接没问题,但是另一常见的cu ...

  4. C#面试常见题

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答: private : 私有成员, 在类的内部才可以访问. protected : 保护成员 ...

  5. webpack.config.js====配置babel

    参考:https://www.jianshu.com/p/9808f550c6a91. 安装依赖babel-loader: 负责 es6 语法转化babel-preset-env: 包含 es6.7 ...

  6. 北航oo作业第四单元小结

    1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...

  7. uLua学习之读取外部Lua脚本(四)

    前言 上节说到了Lua脚本与unity3d中C#脚本的数据交互,但是我感觉上节中的数理方式不太好,因为我们是把Lua脚本以字符串形式粘贴到C#脚本中的,如果读取配置数据都这样做的话,那就太可怕了.想想 ...

  8. Centos install ICU, INTL for php

    1. Install ICU from source wget http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.tgz ...

  9. SQL 使用触发器常见错误

    今天做代码审查时,看见以下一段触发器的创建脚本,我们一起来分析一下 create trigger [trigger_puClassRoomType] on [dbo].[puClassRoomType ...

  10. JavaScript:理解Promise方法

    什么是promise? Promise的核心思想是代表异步操作的一个结果,并且promise具有三个状态(pending初始状态,fulfilled成功状态,rejected失败状态).我们可以理解为 ...