<Head First Java>十大遗珠之憾
来源:互联网 发布:不符合淘宝认证要求 编辑:程序博客网 时间:2024/05/20 09:22
为什么要在乎String的不变性?
当程序越来越大时,不可避免地会有很多String对象。为了安全性和节省空间的原因,String是不变的。意思是下面的程序:
String s = "0";for(int x=1;x<10;x++){s=s+x;}实际上会创建出10个String对象("0","01"."012"......"0123456789")。最后会引用到"0123456789"这个值,但此时会存在10个String。
创建新的String时,Java虚拟机会把它放到称为”String Pool“的特殊存储区中。如果已经出现同值的String,Java虚拟机不会重复建立String,只会引用已存在者。这是因为String是不变的,引用变量无法改变其他参考变量引用到的同一个String值。
String pool不受GC管理,因此我们for循环建立的10个String有9个事在浪费空间。
同样的事情存在包装类
Integer iWrap = new Integer(42);它的值永远会是42.包装对象创建后就无法改变该对象的值。
如何节省内存?
如果要执行一堆String操作,则StringBuilder这个class更为合适。StringBuilder官方文档
借助于它的相关方法,可以方便的进行增删改,但是StringBuilder适用于单线程,如果多线程需要同步,则推荐使用StringBuffer。StringBuffer官方文档好玩的数组
问题:5x5的数组Key[][]有多少个引用变量才能存取所有元素呢?
Key[][] k = new Key[5][5];回答: 1个引用变量k
5个引用变量k[0]到k[4]
25个引用变量k[0][0]到k[4][4]
共计31个。
方便的枚举
有时候我们需要一组常量来代表可用值的集合。这样的一组可用值被称为枚举。enum是这样的:
public enum Members{ JERRY, BOBBY, PHIL};public Members selectedBandMember; //Members的实例只能有JERRY,BOBBY,PHIL三种类型if(selectedBandMember == Members.JERRY){//执行与JERRY有关的程序}是不是很方便,如果是以前,会定义JERRY是1,BOBBY是2,PHIL是3。传入的值是1......(祈祷不要传入9527)。
枚举可以使用if和switch。我们可以用==或者.equals()来比较enum的实例。一般认为==是比较好的风格。
1 0
- <Head First Java>十大遗珠之憾
- Head First Java
- [Head First Java]-读书笔记
- mew, head first Java
- Head First Java资源
- Head First Java勘误
- head first java 读书笔记
- Head First Java第一章
- Head First Java勘误
- Head First Java 总结
- Head first java
- Head First Java学习心得
- JAVA Head First 第一章
- Head First Java笔记之构造函数篇
- java设计模式-Head First设计模式之策略模式
- java设计模式-Head First设计模式之观察者模式
- java基础-head first java
- Head First 之 策略模式
- 最常用的vim快捷键
- 马尔可夫决策过程MDP
- 数据库集合运算与关系代数
- openstack新建云硬盘挂载到实例的步骤
- CSS布局——DIV水平居中和垂直居中
- <Head First Java>十大遗珠之憾
- 【Android控件】Android RecyclerView 使用完全解析 体验艺术般的控件
- 日志那点事儿——slf4j源码剖析
- C++显式转换(RTTI映射语法)
- Javascript学习08-BOM
- escape()、encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()
- 打开ios设备的闪光灯代码
- Alcatraz
- 限制字数(半角全角)