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 类具有是不可变 ...
随机推荐
- python+selenium实现动态爬取及selenuim的常用操作
应用实例可以参考博客中的12306自动抢票应用 https://www.cnblogs.com/mumengyun/p/10001109.html 动态网页数据抓取 什么是AJAX: AJAX(Asy ...
- C语言/C++编程学习:栈的代码实现之数组方案
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- Springboot 报找不到对应的Mapper接口或RPC接口等问题
解决方法: 在Service引用中找到对应的Mapper引用.RPC引用: 给org.springframework.beans.factory.annotation.Autowired注解设置一个r ...
- 20155212 2016-2017-2 《Java程序设计》第3周学习总结
20155212 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 Chapter 4 要产生对象必须先定义类,类是对象的设计图,对象时类的实例. 一个原始码中 ...
- 20155305乔磊2016-2017-2《Java程序设计》第四周学习总结
20155305乔磊2016-2017-2<Java程序设计>第四周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为. 面向对象中,子类继承父类,就是把程序中相同的代 ...
- 优步UBER司机奖励政策:含高峰、翻倍、行程、金牌司机、保底奖励(持续更新...)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://didi-uber.com/archiv ...
- Mysql:存储过程游标不进循环的原因详解
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客给刚接触存储过程的朋友做个引导作用,目的是解决游标不走循环 很多人发现他的游标,无论是嵌套循环还是单层 ...
- 区块链技术:每位CEO都应了解
区块链技术有可能成为一项广泛应用的突破性技术,像蒸汽机.电力或因特网那 样,改变整个社会和经济的运行方式. 对企业而言,信任至关重要.今天,我们基于信任,将钱存放在银行,通过电商企业 网购产品,并且依 ...
- Python之requests的安装
在 windows 系统下,只需要输入命令 pip install requests ,即可安装. 在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安 ...
- TPO-17 C2 Reschedule part-time job in campus dining hall
TPO-17 C2 Reschedule part-time job in campus dining hall 第 1 段 1.Listen to a conversation between a ...