《Java基础复习笔记03我们不太注意的陷阱》.docVIP

  • 2
  • 0
  • 约 14页
  • 2016-05-30 发布于河南
  • 举报

《Java基础复习笔记03我们不太注意的陷阱》.doc

Java基础复习笔记03我们不太注意的陷阱 刘岩 虚拟机对字符串的处理 虚拟机是将字符串直接量(不用new声明的)对象放到一个对象池中去缓存的,第一次使用的时候会将其放入池中,如果下次有其他变量访问一摸一样的直接量的话直接从对象池中去取该直接量,而不是又再生成一个对象。一般该池中的对象都不会被垃圾回收器回收。 比如: String str1 = 1; String str2 = 1; 实际上这段代码仅仅创建了一个字符串直接对象,保存在对象池中,池中对象就是”1”。str1和str2指向了该对象池的对象位置。 编译时能确定的值 在编译时就能确定的值,在编译的时候就能够确定是否创建新的对象池对象。比如: String str3 = suhuanzhen123; String str4 = suhuanzhen + 1 + 2 + 3; System.out.println(str3 == str4); 实际上str3和str4在内存池中都是指向了suhuanzhen123这个字符串对象,所以输出时true。因为str4在编译期间就能确定值是suhuanzhen123,所以JVM不会再创建新的对象。直接从对象池中去取。 在编译期间不能确定的值 如果字符串的拼接包含了函数、变量等等编译时不确定因素,那么此时就不能指向对象池中的变量了。比如 String str5 = suhuanzhe

文档评论(0)

1亿VIP精品文档

相关文档