字符串对象一旦被初始化就不会改变
String s = "abc";
s = "nba";
String s1 = "abc";
System.out.println(s==s1);
输出结果:true
s只是一个引用变量,开始指向的是abc对象,后来指向nba对象,但是abc对象本身是不会改变的
在字符串建立的时候,内存中会建立一个字符串缓冲区,也可以理解成字符串常量池。开始时常量池是空的,在建立s的时候,系统会在常量池中寻找是否存在abc的字符串,如果不存在,就会建立这个字符串,然后把地址值赋给s。在建立s1的时候,系统也会先在常量池中寻找是否存在abc的字符串,发现存在后,就会直接把这个地址值赋给s1,所以s和s1的地址值是相等的,结果返回true。
字符串既然是对象,所以也可以通过new关键字来创建。String类中有String(String original)构造方法,可以接收字符串,也就是可以通过new来创建字符串对象。
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1==s2);
输出结果:false
第一句是在字符串常量池中创建了一个对象,然后把这个地址值赋给s1。
第二句是在堆内存中创建了一个字符串abc对象,然后通过new创建了一个对象,再把字符串abc作为参数传递给String构造函数。
所以他们的地址值是不一样的。
调用equals函数进行比较输出结果是false,因为String类复写了Object中的方法,比较的是字符串中的内容。
构造函数
String(byte[] bytes):通过byte数组构造字符串对象,byte数组中的内容会根据Unicode表转换成字符对象再连接起来组成字符串。
String(byte[] bytes, int offset, int length):通过byte数组的子数组构造字符串对象,offset:子数组第一个byte开始索引,length:子数组长度
String(char[] value):通过char数组构造字符串对象
String(cahr[] value,int offset ,int count):通过字符数组的子数组构造字符串对象,offset:子数组第一个字符的索引,count:子数组长度
String(StringBuffer buffer):通过StringBuffer构造字符串对象
例:byte[] b = {97,98,99,100}; char[] ch = {'q','w','e','r'}; StringBuffer sb = new StringBuffer(); sb.append("abc1"); sb.append("abc2"); sb.append("abc3"); sb.append("abc4"); String s1 = new String(b); String s2 = new String(b,1,3); String s3 = new String(ch); String s4 = new String (ch,1,3); String s5 = new String(sb); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); System.out.println(s5);
输出结果:
abcd
bcd
qwer
wer
abc1abc2abc3abc4一般函数
获取
1.1
int length():获取字符串中字符的个数(长度)
1.2
char charAt(int index):根据位置获取字符
1.3
int indexOf(int ch):返回指定字符在字符串中第一次出现的索引,参数为字符或Unicode代码点,如果存在该参数字符则返回索引,如果不存在返回-1
int indexOf(int ch, int fromIndex):返回指定字符在字符串中第一次出现的索引,在指定位置处开始搜索(向右)
int indexOf(String str):返回参数字符串在字符串中第一次出现的索引
int indexOf(String str, int fromIndex):返回参数字符串在字符串指定位置第一次出现的索引int lastIndexOf(int ch):返回指定字符在字符串中最后一次出现的索引
int lastIndexOf(int ch ,int fromIndex):返回指定字符在字符串中的索引,在指定位置反向搜索(向左)
int lastIndexOf(String str):返回参数字符串在字符串中最后一次出现的索引
int lastIndexOf(String str, int fromIndex):返回参数字符串在字符串指定位置最后一次出现的索引
1.4
String subString(int beginIndex):获取字符串的子串,从开始索引一直到字符串末尾
String subString(int beginIndex, int endIndex)获取字符串中一部分字符串,也叫子串。包括begin,不包括end。例:
String str = new String("eabcdebc"); System.out.println(str.length()); System.out.println(str.charAt(6)); System.out.println(str.indexOf('a')); System.out.println(str.indexOf('c',4)); System.out.println(str.lastIndexOf('e',4)); System.out.println(str.substring(2,5));
输出结果:
8
b
1
7
0
bcd转换
2.1 String[] split(String regex):将字符串编程字符串数组(字符串的切割),涉及到正则表达式
2.2 char[] toCharArray():将字符串变成字符数组,会根据Unicode将字符串中的内容变成对应的byte值。
2.3 byte[] getBytes():将字符串变成字节数组
2.4 String toUpperCase():将字符串中的字母变成大写
String toLowerCase():将字符串中的字母变成小写
2.5 String replace(char oldch, char newch):用新字符替换旧字符,返回一个新的字符串
String replace(String s1, String s2):用新字符串替换旧字符串,返回一个新的字符串
2.6 String trim():将字符串两端的空格去掉
2.7 String concat(String str) :连接两个字符串,将str连接到String的结尾
例:String str1 = "张三,李四,王五"; String[] arr = str1.split(","); char[] ch = str1.toCharArray(); String str2 = "ab你"; String s3 = "ABC".toLowerCase(); String s4 = str2.replace('a','z'); String s5 = " a b c ".trim(); String s6 = str1.concat("abc");
输出结果:
abc
zb你
a b c
张三,李四,王五abc判断
3.1
boolean equals(Object obj):判断两个字符串是否相同,如果相同返回ture,否则返回false。这个方法覆盖了Object中的equals方法,Object方法中比较的是对象的地址值,这里比较的是字符串中的内容。
boolean equalsIgnoreCase(String anotherString):忽略大写比较字符串内容(原理是将字符串转成小写再进行比较)。
3.2
boolean contains(string str):字符串中是否包含参数字符串,包含就返回ture,否则返回false
3.3
boolean startsWith(string):字符串是否以指定字符串开头
boolean endsWith(string):字符串是否以指定字符串结尾
例:String s = "abc"; System.out.println(s.equals("abc")); System.out.println(s.equalsIgnoreCase("AbC")); System.out.println(s.contains("ab")); System.out.println(s.startsWith("ab"));
输出结果:
true
true
true
true比较
int compareTo(String anotherString):按照字典顺序比较两个字符串,结果返回一个Unicode差值,如果字符串相等则返回0。
例:String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1.equals(str2)); System.out.println(str1.compareTo(str2)); System.out.println(str1 == str2);
输出结果:
true
0
false其他
valueOf(int i):返回int参数的字符串表示形式(没有byte和short)