您的位置:首页 > 其它

内存经典案例分析

2016-03-15 23:22 288 查看
练习:

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但是线程不安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: