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诸多关键字中较常使用的一个,从 ...
随机推荐
- 虚拟机中安装Ubuntu后,安装VMwareTools出错的解决办法:Not enough free space to extract VMwareTools
1.选择安装VMwareTools 2.将加载后的Vmware Tools中的*.tar.gz文件,复制到桌面后提取,否则会报错: 3.然后进入提取后的文件下,运行终端 sudo ./vmware-i ...
- LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)
这是悦乐书的第311次更新,第332篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762).给定两个正整数L和R,在[L,R]范围内,计算每个整数的 ...
- hdfs一直处于safemode模式
目前来看,导致hdfs一直处于safemode模式最直接的原因是已成功复制的块的比例没有达到默认值,块的损坏也会造成一直处于安全模式. 1)文件系统中有损坏的文件,使用fsck命令来查看 hadoop ...
- IdentityServer4 知多少
1. 引言 现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号.小程序,基于IOS.Android的App,基于Windows系统的桌面应用和UWP应用等等,这么多种类的应用,就给应用的开 ...
- T5大牛带你解析:如何实现分布式技术
1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案. 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓存 ...
- 聊聊分布式开发 Spring Cloud
概述 本文章只是简单介绍了微服务开发的一些关键词,如果需要知道具体实现和可以评论留言 我会及时的增加连接写出具体实现(感觉没人看 就没写具体实现). 持续更新中...... SpringCloud和D ...
- 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积
一.前述 怎么样对训练出来的模型进行评估是有一定指标的,本文就相关指标做一个总结. 二.具体 1.混淆矩阵 混淆矩阵如图: 第一个参数true,false是指预测的正确性. 第二个参数true,p ...
- android学习笔记--AlarmManager
AlarmManager称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似. 都有两种相似的用法: (1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager ...
- 中国.NET:各地微软技术俱乐部汇总(更新中...)
与微软技术的发展历程相似,微软俱乐部的发展同样经历着沉沉浮浮.2002年周庆麒先生创办的著名Office技术论坛Excel Home的上线,各种线上技术社区在中国的互联网世界中萌发.接着以鞠海洋(广州 ...
- Redis学习笔记~分布锁的使用
回到目录 分布锁主要用在多进程共同访问同一个资源时候,用来保持同一时间段只能有一个进程执行,同时避免了并发冲突的出现,这在很多场景都会用到,像秒杀库存,抽奖库存,多操作者处理一家公司等. void T ...