1.String类是public、final修饰的。

在Java中,被final修饰的类是不允许被继承的,并且String它的成员方法都默认为final方法。

查看源码得知,String类其实是通过char数组来保存字符串的。

对所有的String对象操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。

也就是说进行这些操作后,最原始的字符串并没有被改变,String类是不可变类。

如果我们用String来操作字符串的时候,一旦我们字符串的值改变,就会在内存创建多一个空间来保存新的字符串,因此频繁操作String效率会很低。

对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

 package com.rong.se;

 public class UseString {

     /**
* String操作
* @author 容杰龙
*/
public static void main(String[] args) {
String string="rong-jie-long";
//String重载很多构造方法,不列举。。。
String str=new String("abc well"); char ch = str.charAt(0);
System.out.println(ch);
int codePointAt = str.codePointAt(1);
System.out.println(codePointAt);
int codePointBefore = str.codePointBefore(1);
System.out.println(codePointBefore);
//相等返回0 比较大小
int compareTo = str.compareTo("abc well");
System.out.println(compareTo);
int compareToIgnoreCase = str.compareToIgnoreCase("ABC WELL");
System.out.println(compareToIgnoreCase);
//类似+
String concat = str.concat(string);
System.out.println(concat);
//以什么开始
boolean endsWith = str.endsWith("ll");
System.out.println(endsWith);
boolean startsWith = str.startsWith("abc");
System.out.println(startsWith);
//包括索引位置为5的字符
String substring = string.substring(5);
System.out.println(substring);
String[] split = string.split("-");
for (String string2 : split) {
System.out.println(string2);
}
//限制最多分成几段
String[] split2 = string.split("-", 3);
for (String string2 : split2) {
System.out.println(string2);
}
//比较是否相等,区分大小写
boolean equals = str.equals(string);
System.out.println(equals);
//比较是否相等,不区分大小写
boolean equalsIgnoreCase = str.equalsIgnoreCase(string);
System.out.println(equalsIgnoreCase);
int length = str.length();
System.out.println(length);
// 。。。。。。。。。。。。。。。。。。
} }

2.StringBuilder不支持并发操作,线程不安全的,不适合多线程中使用,但其在单线程中的性能比StringBuffer高,是可变类,

任何对它所指代的字符串的改变都不会产生新的对象。

 package com.rong.se;

 public class TestStringBuilder {

     public static void main(String[] args) {
//创建StringBuilder对象
StringBuilder sb=new StringBuilder();
StringBuilder stringBuilder=new StringBuilder("abcdefg");
sb.append(123);
sb.append("hhh");
sb.append(3.14159265354);
System.out.println(sb.toString());
//////////////////////////////
System.out.println(sb.charAt(3));
//可变类, 操作后仍然是同一个对象,只是内容不一样
sb.delete(0, 10);//左闭右开,可返回对象,同一个对象
System.out.println(sb);
//删除索引位置字符,可返回对象,同一个对象
StringBuilder deleteCharAt = sb.deleteCharAt(0);
System.out.println(sb);
//true,同一个对象
boolean b = sb.equals(deleteCharAt);
System.out.println(b);
//获取字符串首次出现的索引位置
int indexOf = sb.indexOf("53");
System.out.println(indexOf);
//从索引位置第几个开始插入字符串,可插入多种类型数据
sb.insert(3, "www");
sb.insert(3, 123.123);
System.out.println(sb.toString());
int lastIndexOf = sb.lastIndexOf("12", 6);
System.out.println(lastIndexOf);
System.out.println(sb.length());
//替换。左闭右开原则。
StringBuilder replace = sb.replace(0, 3, "r");
System.out.println(replace);
//反转
sb.reverse();
System.out.println(sb);
// 从索引位置第n个起(包含n),截取字符串,生成新的字符串!!!
String substring = sb.substring(10);
System.out.println(substring);
//转成String
String string = sb.toString();
System.out.println(string); } }

3.StringBuffer则是可变类,是线程安全的,任何对它所指代的字符串的改变都不会产生新的对象。

StringBuffer的操作与StringBuilder操作类似,基本相同。略。。。。。。

总结:

可变与不可变、线程安全与不安全、执行效率

String直接相加字符串,效率很高,因为在编译器便确定了它的值,形如"a"+"b"+"c"; 的字符串相加,在编译期间便被优化;对于间接相加(包含字符串引用),形如s1+s2+s3; 效率要比直接相加低,因为在编译器不会对引用变量进行优化

String、StringBuilder、StringBuffer三者的执行效率:StringBuilder > StringBuffer > String(相对而言)

     当字符串相加操作或者改动较少的情况下:String

  当字符串相加操作较多的情况下:StringBuilder

  当程序采用了多线程:StringBuffer

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

  1. String, StringBuilder 与StringBuffer的区别与联系

    1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...

  2. String,StringBuilder与StringBuffer的区别

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  3. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  4. String、StringBuilder和StringBuffer的区别

    1         String.StringBuilder和StringBuffer的区别 String.StringBuilder.StringBuffer都可以用来保存字符串.如果是使用次数比较 ...

  5. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  6. 面试必知:String、StringBuilder、StringBuffer的区别

    你知道String.StringBuilder.Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗? 别急,这篇文章带你解决这些问题. 可变性 首先,String是字符串,我 ...

  7. JAVA String介绍、常量池及String、StringBuilder和StringBuffer得区别. 以及8种基本类型的包装类和常量池得简单介绍

    一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.定义方式   方式一:直接赋值法 String str1 = "hello"; 方式 ...

  8. StringBuilder与StringBuffer的区别

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  9. StringBuilder和StringBuffer的区别

    Java中StringBuilder和StringBuffer的区别分析 StringBUilder是线程不安全的(线程同步访问的时候会出问题),但是效率相对较高. (String类型使用加号进行拼接 ...

  10. Java基础(32):String与StringBuilder、StringBuffer的区别(String类)

    在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢? String 类具有是不可变 ...

随机推荐

  1. golang 项目实战简明指南

    原文地址 开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行 ...

  2. sqlserver之group by 与over函数

    group by 函数主要用来对数据进行分组,over()函数则是一个“开窗函数”,它更多的是与聚合函数如:sum().max().min().avg().count()等函数以及排名函数如:row_ ...

  3. tarjan 强连通分量

    一.强连通分量定义 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly c ...

  4. 自己第一次使用ANTLR遇到的问题

    觉得既然是第一次尝试ANTLR嘛,那就来个简单点的,parse Windows 的 hosts 文件吧,结果...... 先上一段 grammar: grammar hosts; hostfile: ...

  5. 自定义对象存入Redis

    package com.cms.common; import com.alibaba.fastjson.JSON; import com.qiyi.tvguo.cms.common.utils.Obj ...

  6. Makefile与Myod

    Makefile的引入 课堂测试总结 初识Makefile target ... : prerequisites ... command ... ... target也就是一个目标文件,可以是Obje ...

  7. 20155317王新玮 2016-2017-2《Java程序设计》第2周学习总结

    20155317 2016-2017-2<Java程序设计>第2周学习总结 课本知识: 认识类型与环境 整数:包括short,int,long .它们分别占用2个字节,4个字节和8个字节. ...

  8. Java集合——LinkedList源码详解

    )LinkedList直接继承于AbstractSequentialList,同时实现了List接口,也实现了Deque接口. AbstractSequentialList为顺序访问的数据存储结构提供 ...

  9. iOS 中架构模式的浅显理解

    我们开发软件中应用各种模式,主要是为了 职责划分:一个类只做一件事 易用,可维护,方便扩展 解耦,相互独立,可单独测试 各种设计模式其实都是在解决上面的问题,让我们对比看看吧. 一.如何理解MVC设计 ...

  10. Error running 'Tomcat 7': Unable to open debugger port (127.0.0.1:9342)

    这个只需要把java虚拟机进程结束掉就行了