Please enable JavaScript.
Coggle requires JavaScript to display documents.
String - Coggle Diagram
String
API(判断)
//用来比较字符串的内容,注意区分大小写
boolean equals(Object obj)
//忽略字符串大小写比较字符串内容,常见用于比较网址URL
boolean equalsIgnoreCase(String str)
//判断当前字符串对象是否包含,目标字符串的字符序列,常见用于确定是否有盗链行为
boolean contains(String str)
//判断当前字符串对象,是否已目标字符串的字符序列开头
boolean startsWith(String str)
//判断当前字符串,是否以目标字符串对象的字符序列结尾,常用于确定文件后缀名格式
boolean endsWith(String str)
//判断一个字符串,是不是空字符串
boolean isEmpty()
可变字符串
StringBuffer
线程安全,效率低
StringBuilder
线程不安全,效率高
这两者的底层不再是final修饰的数组,而是final修饰的缓冲区,所以可以实现高效率的拼接功能
API(获取)
// 获取当前字符串对象中,包含的字符个数
int length()
//获取字符串对象代表字符序列中,指定位置的字符
char charAt(int index)
//在当前字符串对象中查找指定的字符,如果找到就返回字符,首次出现的位置,如果没找到返回-1
//也可以填字符
int indexOf(int ch)
//查找当前字符串中,目标字符串首次出现的位置(如果包含),找不到,返回-1
这里的位置是指目标字符串的第一个字符
int indexOf(String str)
//指定,从当前字符串对象的指定位置开始,查找首次出现的指定字符串的位置(如果没找到返回-1)
//这里的位置是指目标字符串的第一个字符,在当前字符串对象中的位置
int indexOf(String str,int fromIndex) ,
//返回字符串,该字符串只包含当前字符串中,从指定位置开始(包含指定位置字符)到结束的那部分字符串
String substring(int start)
//返回字符串,只包含当前字符串中,从start位置开始(包含),到end(不包含)指定的位置的字符串
String substring(int start,int end)
API(比较)
compareTo()
如果两个字符串首字符不相等,则返回编码值之差
如果字符都是一样的,则返回长度之差
String的自然排序(也叫字典排序):编码值越大越在后面
实现Comparable接口完成自然排序
Array.sort()会自动调用compareT方法进行两两比较,不需要关心它的实现,就会按照集合/数组中从小到大排序
compareTo方法可以看成是方法的调用者对象-方法的参数对象,这样就容易根据条件写出对应的比较规则了
重写内容应该和equals保持一致
由于Comparable接口完成自然排序不是很方便,所以引入了Comparator接口
带比较器的Arrays.sort方法,其中Comparator接口的实现类对象就是比较器,该对象通过compare方法传入比较的规则
表示传入比较规则的int compare(T o1, T o2)方法:该方法可以看成是o1-o2,如果方法返回负数,意外这o1< o2,相反则大于,只有当方法返回0时,才表示对象相等
String底层如何存储字符串
用一个被final修饰的数组
final修饰,不能指向另一个数组
长度不可更改,局限性很大
字符串常量池
字符串常量在程序的编译期间就能够确定它的值,所以在编译时期就能够加入"静态常量池",随着JVM执行,在类加载过程中如果类中存在字符串字面值常量,会直接从"静态常量池"中读取并加入"字符串常量池"(字符串常量池在堆上)
每当创建字符串常量对象时,JVM会首先检查字符串常量池,如果该字符串对象已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串对象不存在于常量池中,就会实例化该字符串并且将其放到常量池中。