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. 我的Android Studio配置

    Android Studio固然好用,但是刚从Eclipse转移到Android Studio上难免有很多不便,现在集中整理一下AS与Eclipse的区别,使得AS更好用. 快捷键Keymap到Ecl ...

  2. 【JavaScript权威指南】——逻辑与(&&)

    三种用法总结: 1.布尔值计算: [成员]={false,true} 2.“真值”,“假值”计算: [假值]={false,null,undefined,0,-0,NaN,""} ...

  3. 11-散列4 Hashing - Hard Version (30 分)

    Given a hash table of size N, we can define a hash function (. Suppose that the linear probing is us ...

  4. QueueUtil

    import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import org.slf4 ...

  5. 提高PHP编程效率的20个要点

    用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...

  6. Python 面向对象程序设计

    类的设计 方法优先的原则, 在__init__方法中创建出需要的属性, 对于基类来说, 只进行默认值得初始化, 0, None等, 对于真正需要使用的子类, __init__方法则是进行我们需要的初始 ...

  7. c# string.format 的简写 $

    var name = "huchao"; var info = $"你是谁,我叫:{name}"; Console.Write(info); Console.R ...

  8. java环境安装(win7)

    首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u13-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入&qu ...

  9. Mavlink 协议 理解

    来源:blog.csdn.net/super_mice/article/details/44836585 之前看了mavlink协议,网上关于mavlink的资料不多.本文大概总结了下对mavlink ...

  10. Day5 CSS基本样式和C3选择器

    Day5 CSS基本样式和C3选择器 一.背景属性 1.背景颜色            background-color:transparent(默认值,透明); 颜色的取值:            ...