String Intern()
来源:互联网 发布:俄罗斯女孩 知乎 编辑:程序博客网 时间:2024/05/16 12:25
当需要对一个对象进行实例的时候,但是这个对象中的属性有个类型为String的字段,但是这个字段的值在创建对象的时候并不知道,需要在代码执行的过程中给其赋值,可以通过String.intern()进行处理。
String.intern():
再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了
例3:
String
s0= “kvill”;
String
s1=new String(”kvill”);
String
s2=new String(“kvill”);
System.out.println(
s0==s1 );
System.out.println(
“**********” );
s1.intern();
s2=s2.intern();
//把常量池中“kvill”的引用赋给s2
System.out.println(
s0==s1);
System.out.println(
s0==s1.intern() );
System.out.println(
s0==s2 );
结果为:
false
**********
false
//虽然执行了s1.intern(),但它的返回值没有赋给s1
true
//说明s1.intern()返回的是常量池中”kvill”的引用
true
最后我再破除一个错误的理解:
有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的
String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的:
看例4:
String
s1=new String("kvill");
String
s2=s1.intern();
System.out.println(
s1==s1.intern() );
System.out.println(
s1+" "+s2 );
System.out.println(
s2==s1.intern() );
结果:
false
kvill
kvill
true
在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的,当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。
s1==s1.intern()为false说明原来的“kvill”仍然存在;
s2现在为常量池中“kvill”的地址,所以有s2==s1.intern()为true。
- String intern()
- String intern()
- String.intern();
- string.intern()
- String.intern()
- String intern
- String Intern()
- string intern
- String.intern()
- String.intern();
- String.intern()
- String#intern
- String.intern()
- String intern
- String.intern(),String.subString()
- 【Java】【String】String.intern()
- String中intern的方法 String.intern();
- String.Intern 方法
- 冒泡排序算法的两种优化
- tp框架在构造函数中调用成员方法笔记
- 创建cookie,慢慢更~
- 2016下半年计划
- CodeForces 624A Save Luke神庙大逃亡(暑期小练习)
- String Intern()
- leetcode 11. Container With Most Water-最大容器|双指针
- 飞机游戏软件 150206305
- UNREFERENCED_PARAMETER作用
- mysql 高并发
- python 文件1
- ubuntu安装下载好的jdk
- GPGPU-Sim 3.2.2 下编译ispass 2009 中WP
- 脚踏实地,天马行空