作者tkcn (小安)
站内java
标题Re: [问题] String的intern()有何好处?
时间Sat Jan 9 12:06:14 2010
刚从时光机里头找出一篇旧文:
---
作者
[email protected] (shen), 信区: Java
标题 Re: 请问让JAVA程式加快的方法
时间 temp (Tue Jul 17 16:12:24 2001)
转信站: INF!ccnews.thu!news.cis.nctu!alex
出 处: mouse.cis.nctu.edu.tw
※ 引述《[email protected] (魍魉..)》之铭言:
: ※ 引述《[email protected] (痴人)》之铭言:
: : O'REILLY 有一本 Java performance turning 的书
: : 我只看到英文版
: : 这本写了不少以写作技巧来增进执行速度的方法
: : 另外 同步 需要取得进入权限当然会比较慢
: : 好像在体育场不收票的演唱会
: : 跟要排队一个一个进去的演唱会
: : 进场速度当然差很多
: 减少i/o 善用gc 增进coding skill
1.先说一个关於String的空间节省方式吧!
String物件有两种建构方式:
String s = new String("aaa");
String s = "aaa";
上面第一种创造了两个String obj比较占空间,
第二种只有一个String obj(在类别的literal pool中)比较不占空间.
2.当你的程式需的程式会常常更改String时, 用StringBuffer代替String,
这样一来可以大幅减轻garbage collector的工作量.
3.若你需要大量compare两个不同String物件的内容时可用intern() method,
将一个相同内容的String创造出来并放入class的String literal pool中,
以==代替.equals(), 因为==只看reference是否相同,
远比.equals()一个一个字元比较来的快.
举个例子:
String s1 = new String("abcdefghijklmnopqrstuvwxyz");
String s2 = new String("abcdefghijklmnopqrstuvwxyz");
String s3 = s1.intern();
String s4 = s2.intern();
if(s3==s4) //这儿是比较s1与s2的内容是否想同,原本是要用s1.equals(s2)
{ //共要compare 26个字母是否相同, 现在只要看一次ref就行了.
System.out.println("这行会印出来!");
}
这样一来多少就可以减少程式执行的时间了.
hope it helps..
--
※Post by shen from shen.Dorm8.NCTU.edu.tw
老鼠的香香乳酪洞˙电子布告栏系统˙alexbbs.twbbs.org˙140.113.166.240
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.160.117
1F:→ sbrhsieh:3. 字串比对如果只作一次,没有必要去使用 intern。 01/09 12:15
2F:→ sbrhsieh:要考虑 intern 操作本身的成本。 01/09 12:54
3F:→ tkcn:3 有讲前提呀..若你需要大量compare两个不同String物件的内容 01/09 12:57
4F:→ sbrhsieh:那甚麽情况会重复多次去比对两个字串? 01/09 13:06
5F:推 now99:loop 01/09 13:11
6F:→ sbrhsieh:now99 你是认真的吗? 01/09 13:13