关于string类实例生成方法的讨论已经做了很多了,无非就是生成几个对象,堆里的对象,string pool里的对象这些~blablabla~~~
我想说的是intern方法到底有什么
意义
我们知道,当一个string类型的变量以这个形式赋值时,
class="java" name="code">String str = "aaa";
它会先在string pool中查看有没有一个“aaa”的string对象存在,如果有,返回该对象在string pool中的地址,若没有,则生成一个对象扔到string pool中,再返回该地址。
那么intern方法呢,比如
"aaa".intern();
他也是先在string pool中查看有没有一个“aaa”的string对象存在,如果有,返回该对象在string pool中的地址,若没有,则生成一个对象扔到string pool中,再返回该地址。
那它的存在有个毛线意思啊??带着这个疑问,我去查文档,搜网页,最后得到一个答案是string对象在比较时“==”要比equals方法快很多~~
喔~~~原来如此。于是乎,我带着激动的心情写了两个测试类,来验证这一观点
public class EqualTest
{
public static void main(String[] args)
{
String str1 = new String("aaa");
String str2 = new String("aaa");
Boolean result;
long time1 = System.currentTimeMillis();
long time2;
for(long i = 0; i < 1000000; i++)
{
result = str1.equals(str2);
}
time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
}
public class InternTest
{
public static void main(String[] args)
{
String str1 = new String("aaa");
String str2 = new String("aaa");
Boolean result;
long time1 = System.currentTimeMillis();
long time2;
for(long i = 0; i < 1000000; i++)
{
result = (str2.intern() == str1.intern());
}
time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
}
然后满心欢喜的期待着出现满意的结果。。。
然后结果是这样的
EqualTest
12
InternTest
186
摔!!!你妹啊。。。。这能叫快???
彻底崩溃了。。。于是乎写了这么一篇东西来发泄下。。。
哪位大哥大姐好心来帮下撒~~intern到底有毛用啊????