String概述
被final修饰的表示不可变的字符序列,String的值一般都存储在方法区的常量池里所有有equals方法如果值相同的只会在常量池里出现一份不需要再向程序申请新的内存空间从而减小空间复杂度
String底层
通过构造器直接将参数放到被final修饰过的Value字符数组组成的字符串被双引号引起来的就是字符串。
构造器
String();
String("object");//同时也可以把其他数据类型转换为字符串
方法(都是被static修饰过的所以不需要创建对象也可以调用)
多练多写!!!多练多写!!!多练多写!!!
包装类---String类----基本数据类型---之间的转换
在我们学习java的过程中所有东西都是对象这里就有小伙伴要说了基本数据类型并不是类也不能被创建对象但其实我们每一个基本数据类型都有一个包装类
有了包装类的java才算是真正的面向对象
他们的都继承与NumberNumber
三种类之间的转换
基本数据类型转包装类
Inter a = new integer(10);自动转换 自动装箱
基本数据类型转字符串
String a = new String(10);自动转换 默认调用了String.ValueOf()方法
包装类转基本数据类型
int a = new integer(10);自动拆箱 默认调用xxValue()方法
包装类转字符串
String a = new String(new integer(10));
字符串转基本数据类型
int a = Integer.parseInt("1"); 调用了包装类里的方法XXX . parsexxx("")
字符串转包装类
Integer a = new integer("123");
StringBuffer-StringBuilder
底层+概述:
他们均代表可变的字符序列,而且提供的相关功能和方法也一样
(Stringbuilder与stringbuffer相同底层原理相同只是stringbuffer加了锁,下面以stringbuilder为例)
StringBuffer和StringBuilder都继承了AbstractStringBuilder
。。。。。。。。。待补充!!!!!
StringBuffer-StringBuilder和String的区别!
最本质的区别就在于一个是变量一个是常量一个在创建完成之后就还可以进行修改另一个则不能修改需要, 相当于创建了两个对象!
StringBuffer在处理字符串的时候不会创建新的对象所以在内存上要优于String一般我们建议当我们的字符串,增,删,改,比较多的时候我们使用StringBuffer
String:
然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。
StringBuffer:
StringBuffer类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无疑是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。
StringBuffer方法
public StringBuffer append(String s):将指定的字符串追加到此字符序列。
public StringBuffer reverse():将此字符序列用其反转形式取代。
public delete(int start, int end):移除此序列的子字符串中的字符。
public insert(int offset, String str):将 int 参数的字符串表示形式插入此序列中。
replace(int start, int end, String str):使用给定 String 中的字符替换此序列的子字符串中的字符。
System.out.println("将字符串加入到StringBuilder中"+s5.append("哇哦哇哦哇哦哇哦"));
System.out.println("反转字符串-----"+s5.reverse());
System.out.println("通过索引移除字符串中元素---"+s5.delete(2, 8));
System.out.println("将元素插入到指定索引位置---"+s5.insert(3, "ssss"));
System.out.println("把字符串中指定索引位置的地方替换元素---"+s5.replace(4, 7, "替换的文字"));
方法链
在方法最后return this;
在外面就可以一直点.了
方法链的一个好处,是可以减少你使用对象名的次数。调用的方法越多,能够减少的次数就越多。因此,这个方法也能一定程度上减少需要阅读、测试、调试、维护的代码数量。这个好处不大,但也是有用…
练习题
1、反转字符串:abcdeàedcba abcefgàafecbg
2、获取一个字符串在另一个字符串中出现的次数:a在absdasjdasdjkasdadadas中出现的次数。
3、获取两个字符串中最大的相同子串
“abceghelloqwyuiodefxyz” 、 “abcasavhelloqwb”
提示:将短的字符串的长度一次递减的与长的字符串比较。
4、对字符串中字符进行自然排序。
提示:
将字符串转变成字符数组
对数组进行冒泡排序。
将数组排序后转变成字符串