Java基础系列--07_String、StringBuffer和StringBuilder
String类
(1)字符串:字符串是常量;它们的值在创建之后不能更改,存储在堆中。
如果字符串多次赋值,其实是每次重新赋值的时候程序都先在内存中寻找已开辟的空间是否存在该值;如果找不到,再开辟新的空间存储该对象
(2)构造方法:
A:String s = new String(); //空字符序列
B:String s = new String(char[] chs); //分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
C:String s = new String(char[] chs,int index,int length); //从index到length部分生成字符串
D:String s = new String(String str);
E:String s = "hello";
String strA = "abc";
//等效于:
//char data[] = {'a', 'b', 'c'};
//String strA = new String(data);
String strB = "hello";
System.out.println(strA==strB); //false
strA = "hello";
System.out.println(strA==strB); //true
//说明strA和StrB指向的是同一个空间
(3)字符串的注意事项
A:字符串一旦被赋值,就不能改变。
注意:字符串的值不能改变,但是引用变量可以改变。
B:字符串在作为实参传递给形参时,其实是把地址的值赋给了形参,在形参修改了字符串的内容后,原字符串的内容其实是不变的。
public static void main(String[] args) {
String s = "hello"; //将"hello"的地址赋值给了s
change(s);
System.out.println(s); //hello
}
//注意这里是无返回值,因为这里的测试是不能修改s的地址值
public static void change(String s) {
s += "java";
}
C:字符串的==和equals
//String s = new String("hello")和String s = "hello"的区别。
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2); //false 每一个变量new出来的地址都不相同
System.out.println(s1.equals(s2));//true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3==s4); //false
System.out.println(s3.equals(s4)); //true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6); //true
System.out.println(s5.equals(s6)); //true
/*
* String的equals的实现原理:
* 第一步:先判断这两个字符串的地址值是否相同(==实现)
* 相同:返回true
* 不同:
* 第二步:判断这两个字符串的长度是否相同
* 不同:返回false
* 相同:第三步:将字符串变为数组逐个进行比较
* 找到不同:立刻返回false
* 找到最后:返回true
*/
(4)成员方法
A:判断功能
boolean equals(Object obj) //判断字符串是否相同,考虑大小写
boolean equalsIgnoreCase(String str)//判断字符串是否相同,不考虑大小写
boolean contains(String str) //判断字符串是否包含str
boolean startsWith(String str) //判断字符串是否以str开头
boolean endsWith(String str) //判断字符串是否以str结尾
boolean isEmpty() //判断字符串是否为空
B:获取功能
int length() //获取字符串的长度
char charAt(int index) //获取第index位置的字符
int indexOf(int ch) //获取字符串中第一次出现ch字符的索引
int indexOf(String str) //获取字符串中第一次出现str字符串的索引位置
int indexOf(int ch,int fromIndex) //从某个位置开始获取ch字符第一次出现的索引
int indexOf(String str,int fromIndex)//从某个位置开始获取str字符串第一次出现的索引
String substring(int start) //从某个位置开始截取字符串
String substring(int start,int end) //从某个位置开始到某个位置结束截取字符串
C:转换功能
byte[] getBytes() //将字符串转换为byte数组
char[] toCharArray() //将字符串转换为char数组
static String copyValueOf(char[] chs)//将字符数组转换成字符串
static String valueOf(char[] chs) //将字符数组转换成字符串
static String valueOf(int i) //将一个int数转换成字符串
String toLowerCase() //转小写
String toUpperCase() //转大写
String concat(String str) //拼接字符串
D:其他功能
a:替换功能
String replace(char oldChar,char newChar) //将newChar全部替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
String replace(String oldString,String newString)
b:切割功能
String[] split(String regex) //通过regex切割字符串,切割后会产生一个字符串数组
c:去除两端空格功能
String trim()
d:字典顺序比较功能
int compareTo(String str) //如果str比str1大的话,返回的正数
字符串的比较原理:
第一步:将两个字符串转变为char数组
第二步:逐个比较char数组中的相同元素的大小
相同:继续比较其他元素
不同:返回 第一个数组比较元素的字符减去第二个数组中的同位置元素
注意:若较短的数组长度的最后一位已经比较完了,则返回第一个数组长度减去第二个数组的长度
int compareToIgnoreCase(String str) //忽略大小写比较
因为String变量的值是不可改变的,所以在频繁操作字符串的时候,就会产生极大的垃圾空间,影响程序的运行。而Java提供了可变的字符串缓冲区StringBuffer和StringBulid解决String带来的问题。
StringBuffer
(1)线程安全的可变字符序列,字符串可以发生改变的字符串类。字符串缓冲区类。
(2)构造方法:
A:StringBuffer() //构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
B:StringBuffer(int capacity)//构造一个不带字符,但具有指定初始容量的字符串缓冲区。
C:StringBuffer(String str) //构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
(3)成员方法:
A:添加功能
public StringBuffer append(anyType varName); //在缓冲区的末尾追加
StringBuffer insert(int index,String str); //在指定索引位置添加
B:删除功能
public StringBuffer delete(int start,int end); //从start开始删除到end结束,不包括end位置的字符
StringBuffer delete(0,sb.length); //清空缓冲区
public StringBuffer deleteCharAt(int index); //删除第index位置的字符
C:替换功能
public StringBuffer replace(int start,int end, String str);//替换字符串
void setCharAt(int index ,char); //修改,把指定索引位置的值改成传入的char值
D:截取功能
public String substring(int start); //从start位置开始截取字符串
E:反转功能
public StringBuffer reverse(); //反转字符串的所有字符
F:其他常用的功能
void setLength(int len); //根据传入的len值截取缓冲区的长度
toString() //转换成String
int indexOf(str); //查找str在缓冲区第一次出现的位置
int lastIndexOf(str); //从后向前查找查找str在缓冲区第一次出现的位置
StringBulider
StringBuilder与StringBuffer其实就像是孪生兄弟,使用的方式没有什么太大的区别。但是StringBuild实例不能安全使用多线程。 如果需要同步,那么就使用StringBuffer 。
StringBuilder和StringBuffer
StringBuilder和StringBuffer都是可变的字符序列,适用于需要经常对字符串修改的操作。两者的方法的使用是一样的,区别在于多线程的安全问题。
StringBuilder和StringBuffer与String的区别
StringBuilder和StringBuffeer是可变字符序列;String是不变得,一但被初始化,就不能改变
StringBuilder和StringBuffer的区别
StringBuilder是线程不安全的,所以效率比较高;StringBuffer是线程安全的,效率相对较低(可以解决多线程同步问题)
Java基础系列--07_String、StringBuffer和StringBuilder的更多相关文章
- Java基础-String、StringBuffer、StringBuilder
看下面这段代码: public class Main { public static void main(String[] args) { String string = ""; ...
- 十四、Java基础---------String、StringBuffer、StringBuilder基本应用
在前面的博客中曾提及Java的数据类型分为基本数据类型,和引用数据类型,而String便是最常见的应用数据类型,本文将着重介绍这一引用数据类型的用法. String 字符串 String类是对 ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- Java基础——java中String、StringBuffer、StringBuilder的区别
(转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- Java基础系列2:深入理解String类
Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- Java基础系列--static关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...
随机推荐
- 使用 FFT 进行频谱分析
下面的示例说明了如何使用 FFT 函数进行频谱分析.FFT 的一个常用场景是确定一个时域噪声信号的频率分量. 首先创建一些数据.假设是以 1000 Hz 的频率对数据进行的采样.首先为数据构造一条时间 ...
- pod command
pod 基础使用命令 创建Podfile文件 1 pod init 使用命令打开Podfile文件 1 open -a Xcode Podfile 搜索pod 库 1 pod search 库名 更新 ...
- windows server 2012 r2打造工作站链接 和 RTSS画面防止撕裂方法(包括笔记本独显撕裂,视频撕裂等)
听说 windows server 2008 基于windows vista ,windows server 2008 R2基于win7 , windows server 2012 基于windows ...
- 最简单的Nginx讲解--HTTP服务器、正向代理、反向代理、负载均衡
1. Nginx 1.1 Nginx简介 Nginx是俄罗斯人开发,开源的,免费的. Nginx功能: 1) nginx作为http服务器:类似apache,tomcat,遵循http协议. a) 访 ...
- 如何在你的项目中集成 CAP【手把手视频教程】
前言 之前录制过一期关于CAP的视频,但是由于当时是直播时录制的视频,背景音比较杂所以质量有点差.这次的视频没有直播,直接录制的,视频质量会好很多,第一遍录制完成之后发现播放到一半没有声音,所以又重新 ...
- 不能直接获取?聊聊如何在Shader Graph中获取深度图
0x00 前言 在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了** StreamingAssets.Profil ...
- 为 VUE 项目添加 PWA 解决发布后刷新报错问题
为什么要给 VUE 项目添加 PWA 为什么要添加?因为不管是部署在 IIS,还是 nginx,每次应用部署后,再次访问因为旧的 js 已经不存在,所以页面访问的时候会整个报错,报错的结果就是一个白屏 ...
- Oracle AWRSQRPT报告生成和性能分析
我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...
- Jason Wang:记录自己所想所得(第一次作业)
这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 我在这个课程的目标是 学会现代软件工程的思想,运用到实际中去 这个作业在哪个具体方面帮助我实现目标 ...
- arguments对象详解
在javascript中,函数是没有重载这一项的,所谓的重载,一个函数可以有多个,就是参数的个数和形式不同所以引用的功能不同,而js不存在函数重载,不管传不传参数,函数里面是否引用,关系都不大,一个函 ...