内存经典案例分析
2016-03-15 23:22
288 查看
练习:
内存运行过程:
过程解析:
①从main方法中开始,生成Example对象,在栈内存中建立对象应用,在堆内存中建立实例对象,对象中有两个引用:一个是字符串引用指向常量池中的“good”,一个是数组引用指向堆内存中的一维数组。
②调用change方法,则str指向常量池“good”,ch指向成员变量ch指向的一维数组。
③str指向常量池中的字符串常量“Test OK”,ch指向的数组第一位发生改变。
String类方法的介绍
关于String的经典练习题
StringBuffer是可变序列,并且效率高于String,通常期方法可能改变自身,并不像String的操作函数返回的是一个新的字符串
StringBuilder是可变序列,效率高于StringBuffer但是线程不安全。
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但是线程不安全。
相关文章推荐
- 高德地图#import <MAMapKit/MAMapKit.h> file not found的解决办法
- 虚拟机Linux的联网问题
- <mvc:interceptor> 不起作用的一个解决方法
- 单链表常见习题及C语言实现(持续更新)
- 动态代理
- java <T> <E> <?>
- jQuery技巧
- Android精华汇总
- Hdu 5036-Explosion 传递闭包,bitset,期望/概率
- 软件第三次作业
- 第二周作业
- 读了oracle查询与优化做一些笔记,方便以后查看
- SQL 优化
- jQuery实现三种漂亮的对话框
- 如何用AWS(亚马逊云服务器)搭建一个自己的BLOG (1) – 申请一个AWS云服务器
- 简单密码
- 服务器集群监控 Ganglia 搭建 CenOS6.5
- phpmyadmin使用空密码登入配置方法
- 本地音乐播放器(三)——播放界面和服务的通信
- 数据结构(6)线性表之链表C++实现交集