java中String.intern() 方法
2014-03-08 11:22
316 查看
最直观的意义还是在于 intern()后字符串可以直接 == 进行比较,速度提高了3倍。 难怪Lucene中的Term里面也对field字段串进行了 intern() 处理 明显是为了速度啊
不妨看下面这段代码、 String str1 = "Hello"; String str2 = new String("Hello"); System.out.println(str1==str2.intern()); System.out.println(str2==str2.intern());控制台输出"true"与"false" String的intern()方法就是扩充常量池的一个 方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了 第一个"true"就解释了第一个疑问、intern把str2的内存指向为str1、所以二者相等、字符串池中应该有两个"Hello",一个是str1的引用,另外一个则是str2用new出来的空间,但使用intern后其实已经指向str1的内存空间了,所以才会输出"false"再说点题外话,Stirng str2 = new Stirng("Hello");其实应该有两个对象,一个是存在于栈中的"Hello",另外一个是对变量"str2"的指向,存在于堆内存中。用new关键字不管池中有没有都会开辟一块内存空间。
相关文章推荐
- Java学习笔记
- 深入学习JDK 线程池(之一)
- How to create custom methods for use in spring security expression language annotations
- How to check “hasRole” in Java Code with Spring Security?
- ubuntu-server-12.04.2安装配置jdk
- Unsupported major.minor version 51.0(jdk版本错误)
- Java学习笔记-字符串总结
- 2014-03-08_javascrit_controller&status
- Java应用级产品开发平台APDPlat
- java 四舍五入保留小数点后两位
- java堆栈
- 通过java得到windows的磁盘空间大小
- java第三天
- struts2标签循环List中的Map
- struts.xml不自动提示【解决办法】
- struts2得到默认上传路径
- struts2上传文件
- struts基础包详细
- spring 3.0 xmlns
- java反射代码