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 类具有是不可变 ...
随机推荐
- FPGA静态时序分析基础
FPGA静态时序分析基础 基本概念 Skew: 时钟偏移 Skew表示时钟到达不同触发器的延时差别,Tskew = 时钟到达2号触发器的时刻 - 时钟到达1号触发器的时刻. Jitter: 时钟抖动 ...
- poj 2739 Sum of Consecutive Prime Numbers 尺取法
Time Limit: 1000MS Memory Limit: 65536K Description Some positive integers can be represented by a ...
- 自己用原生JS写的轮播图,支持移动端触摸滑动,分页器圆点可以支持mouseover鼠标移入和click点击,高手看了勿喷哈
自己用原生JavaScript写的轮播图,分页器圆点按钮可支持click点击,也可支持mouseover鼠标悬浮触发,同时支持移动端触摸滑动,有兴趣的友友可以试试哈,菜鸟一枚,高手看了勿喷,请多多指正 ...
- AWT之—画图
package edu.ch4; import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.util.C ...
- 20155212 实验二 Java面向对象程序设计
20155212 实验二 Java面向对象程序设计 单元测试 三种代码 用编程去解决问题,必须学会写三种码: 伪代码 产品代码 测试代码 例: MyUtil 类解决一个百分制成绩转成"优.良 ...
- 【笔记学习】Linux系统与虚拟机学习
Part 1 : 基于VirtualBox虚拟机安装Ubuntu 问题剪辑 --给一开始未知的我的科普指南 1. VirtualBox不能创建64位虚拟机 解决办法: 开启虚拟化技术 详细:重启电脑, ...
- 2017-2018-1 20155319《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155319<信息安全技术>实验二--Windows口令破解 实验环境 试验系统:Windows 2003 实验工具:LC5.SuperDic 实验原理 一.口 ...
- 20155323刘威良第一次实验 Java开发环境的熟悉(Linux + IDEA)
20155323刘威良第一次实验 Java开发环境的熟悉(Linux + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序 ...
- centos7下mysql 开启远程登录
安装mysql 安装mysql就不做过多的介绍了,相信小伙伴们都可以很轻松的安装 进入mysql命令行 mysql -u用户名 -p密码 新建远程登录的用户 grant all on *.* to a ...
- Jquery操作下拉列表和复选框,自定义下拉
后半部分还有自定义下拉列表和开灯关灯的效果,可以进来来看一下 哦 如果网页有下拉列表和复选框,看一下Jquery怎么来操作他们,主要怎么来选取他们的数据,怎么设置某一项选中 先来看个下拉列表 < ...