Re: [問題] String的intern()有何好處?

看板java作者 (小安)時間14年前 (2010/01/09 12:06), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串3/5 (看更多)
剛從時光機裡頭找出一篇舊文: --- 作者 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
3. 字串比對如果只作一次,沒有必要去使用 intern。
01/09 12:15, 1F

01/09 12:54, , 2F
要考慮 intern 操作本身的成本。
01/09 12:54, 2F

01/09 12:57, , 3F
3 有講前提呀..若你需要大量compare兩個不同String物件的內容
01/09 12:57, 3F

01/09 13:06, , 4F
那甚麼情況會重複多次去比對兩個字串?
01/09 13:06, 4F

01/09 13:11, , 5F
loop
01/09 13:11, 5F

01/09 13:13, , 6F
now99 你是認真的嗎?
01/09 13:13, 6F
文章代碼(AID): #1BI02uUQ (java)
討論串 (同標題文章)
文章代碼(AID): #1BI02uUQ (java)