字符串比较
用equals()方法比较两个字符串是否相同
如果用==, 代码如下
String str1 = "i love china";
String str2 = "i love china";
String str3 = new String("i love china");
String str4 = new String("i love china");
System.out.println("str1 == str2 " + str1 == str2);
System.out.println("str2 == str3 " + str2 == str3);
System.out.println("str3 == str4 " + str3 == str4);
/*
控制台
true java中规定, 字符串常量一致, 内存只有一个
false == 只能判断变量存储的数据内容情况, 无法判断引用类型指向空间内容
false
*/
String s = "XXX";先检查字符串常量池是否存放该字符串对象, 如果没有存在,那么就会在字符串常量池中创建这个字符串对象,如果存在直接返回该字符串的内存地址值
String s = new String("XXX"); 首先会先检查字符串常量池中存不存在该字符串对象, 如果不存在就会创建,如果存在就返回内存地址值。创建了出来之后,new String这个语句就会在堆内存中开辟一个字符串对象。总共两个对象.
字符串常用方法
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符 (角标越界)
int indexOf(String str) 获取特定字符的位置(overload)
int lastIndexOf(int ch) 获取最后一个字符的位置
String str1 = "i love china";
int length = str1.length(); //length = 12
char c = str1.charAt(2); //c = ' '
int indexStr = str1.indexOf("love"); // index = 2(i l)找的l的位置
int indexChar = str1.lastIndexOf('i'); //index1 = 9 从后找
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“” null V1.6 (" "除外)
boolean contains(String/char[]/char) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等
String(char[] value) 将字符数组转换为字符串
String(char[] value, int offset, int count)
Static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
char[] toCharArray() 将字符串转换为字符数组
String replace(char oldChar, char newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除空格
StingBuffer
String是不可变的,所以导致String对象泛滥,在频繁改变字符串对象的应用中,需要使用可变的字符串缓冲区类
默认缓冲区的容量是16
StringBuffer : 线程安全的所有的缓冲区操作方法都是同步的。效率很低
private transient char[] toStringCache;
public StringBuffer() {
super(16);
}
public StringBuffer(int capacity) {
super(capacity);
}
添加方法
StringBuffer("jack") 在创建对象的时候赋值
append() 在缓冲区的尾部添加新的文本对象
insert() 在指定的下标位置添加新的文本对象
查找查看
toString() 返回这个容器的字符串
indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。
substring(int start) 从开始的位置开始截取字符串
修改
replace(int start int endString str) 使用给定
String
中的字符替换此序列的子字符串中的字符。该子字符串从指定的start
处开始,一直到索引end - 1
处的字符setCharAt(int index char ch) 指定索引位置替换一个字符
删除反序
StringBuffer delete(int start, int end) 不包含end
StringBuffer deleteCharAt(int index)
StringBufffer reverse() //反序
StringBuilder
StringBuilder 是JDK1.5之后提出的,线程不安全,但是效率要高。用法与StringBuffer类似。
补充
public static void main(String[] args) { String str = "AAA"; str += "BBB"; str += "CCC"; str += "DDD"; str += "EEE"; str += "FFF"; }
public static void main(String[] args) {
String str = "AAA";
str += "BBB";
str += "CCC";
str += "DDD";
str += "EEE";
str += "FFF";
}
jdk8以后, String+=, 底层是StringBuilder
如下javap -v XX.class