Re: [問題] String的intern()有何好處?
剛從時光機裡頭找出一篇舊文:
---
作者 shen.bbs@mouse.cis.nctu.edu.tw (shen), 信區: Java
標題 Re: 請問讓JAVA程式加快的方法
時間 temp (Tue Jul 17 16:12:24 2001)
轉信站: INF!ccnews.thu!news.cis.nctu!alex
出 處: mouse.cis.nctu.edu.tw
※ 引述《BBberry.bbs@ms.twbbs.org (魍魎..)》之銘言:
: ※ 引述《TAHO.bbs@bbs.nhctc.edu.tw (癡人)》之銘言:
: : 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
→
01/09 12:15, , 1F
01/09 12:15, 1F
→
01/09 12:54, , 2F
01/09 12:54, 2F
→
01/09 12:57, , 3F
01/09 12:57, 3F
→
01/09 13:06, , 4F
01/09 13:06, 4F
推
01/09 13:11, , 5F
01/09 13:11, 5F
→
01/09 13:13, , 6F
01/09 13:13, 6F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 5 篇):