String、StringBuilder与StringBuffer的区别
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的区别的更多相关文章
- String, StringBuilder 与StringBuffer的区别与联系
1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...
- String,StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- String、StringBuilder和StringBuffer的区别
1 String.StringBuilder和StringBuffer的区别 String.StringBuilder.StringBuffer都可以用来保存字符串.如果是使用次数比较 ...
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- 面试必知:String、StringBuilder、StringBuffer的区别
你知道String.StringBuilder.Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗? 别急,这篇文章带你解决这些问题. 可变性 首先,String是字符串,我 ...
- JAVA String介绍、常量池及String、StringBuilder和StringBuffer得区别. 以及8种基本类型的包装类和常量池得简单介绍
一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.定义方式 方式一:直接赋值法 String str1 = "hello"; 方式 ...
- StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- StringBuilder和StringBuffer的区别
Java中StringBuilder和StringBuffer的区别分析 StringBUilder是线程不安全的(线程同步访问的时候会出问题),但是效率相对较高. (String类型使用加号进行拼接 ...
- Java基础(32):String与StringBuilder、StringBuffer的区别(String类)
在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢? String 类具有是不可变 ...
随机推荐
- 搭建最小linux系统
Busybox简介 • 制作文件系统我们需要使用到Busybox 工具 – 版本为busybox-1.21.1.tar.bz2 – 开源网址是http://www.busybox.net/ – Bus ...
- style.attr,currentStyle,getComputedStyle获取元素css
老朋友object.style.attr 平常我们都是使用object.style.attr的方式来获取元素的属性, 但是这种方法具有很大的局限性——只能获取内联样式, 而下面的两种方法可以获取到元素 ...
- IDL返回众数(数组中出现次数最多的值)
对于整型数组,可以直接利用histogram函数可以实现,示例如下: IDL>array = [1, 1, 2 , 4, 1, 3, 3, 2, 4, 5, 3, 2, 2, 1, 2, 6, ...
- 20155216 2016-2017-2 《Java程序设计》第九周学习总结
20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...
- 20155232 2016-2017-3 《Java程序设计》第3周学习总结
20155232 2016-2017-3 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 1.对象(Object):存在的具体实体,具有明确的状态和行为. 2.类( ...
- 20155307 2017-2018-2 《Java程序设计》第2周学习总结
20155307 2017-2018-2 <Java程序设计>第2周学习总结 教材学习内容总结 整数:short(2 byte).int(4 byte).long(8 byte) 字节(b ...
- 20155310马英林 实验2 Windows口令破解
实 验 报 告 实验名称: 实验二 口令破解 姓名:马英林 学号: 20155310 班级: 1553 日期: 2017.10.24 一. 实验环境 •系统环境:Windows •网络环境:交换网络结 ...
- 20145226夏艺华 《Java程序设计》实验报告五
实验五 Java网络编程及安全 实验内容 运行下载的TCP代码,结对进行 利用加解密代码包,编译运行代码,结对进行 集成代码,加密后通过TCP发送 结对伙伴:20145203 马超 实验步骤 (一)中 ...
- 北京Uber优步司机奖励政策(4月16日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- iOS 影音新格式 HEIF HEVC
苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频.照片的大小. 一.简介 HEVC全称 High Efficiency Video ...