练习:
package com.heima.collection;
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
内存运行过程:
过程解析:
①从main方法中开始,生成Example对象,在栈内存中建立对象应用,在堆内存中建立实例对象,对象中有两个引用:一个是字符串引用指向常量池中的“good”,一个是数组引用指向堆内存中的一维数组。
②调用change方法,则str指向常量池“good”,ch指向成员变量ch指向的一维数组。
③str指向常量池中的字符串常量“Test OK”,ch指向的数组第一位发生改变。
String类方法的介绍
关于String的经典练习题
package com.itheima;
import org.junit.Test;
public class StringTest {
@Test
public void trimTest() {
String str = " a b c ";
System.out.println(trim1(str));
}
/**
* 练习一:模拟trim()
*/
// 方法一
public String trim1(String str) {
if (str != null) {
char[] charArray = str.toCharArray();
int start = 0;
int end = str.length() - 1;
while ((" ".equals(String.valueOf(charArray[start]))) && start < end) {
start++;
}
while ((" ".equals(String.valueOf(charArray[end]))) && end > 0) {
end--;
}
return str.substring(start, end + 1);
}
return null;
}
// 方法二
public String trim2(String str) {
if (str != null) {
int start = 0;
int end = str.length() - 1;
while (start < end && str.charAt(start) == ' ') {
start++;
}
while (end > start && str.charAt(end) == ' ') {
end--;
}
return str.substring(start, end + 1);
}
return null;
}
/**
* 练习二:将一个字符串进行反转,将字符串的指定部分进行反转
*/
public String reverse(String str, int beginIndex, int endIndex) {
return null;
}
/**
* 练习三:统计字符串在字符串中的出现次数 例:"ab"在"abcdedg"
*/
public int count() {
return 0;
}
/**
* 练习四:获取两字符串的最大相同字串
*/
/**
* 练习五:将字符串中的字符进行自然排序
*/
/**
* 练习六:定义自己的String类
*/
}
注:StringBuffer是可变序列,并且效率高于String,通常期方法可能改变自身,并不像String的操作函数返回的是一个新的字符串
StringBuilder是可变序列,效率高于StringBuffer但是线程不安全。