精華區beta java 關於我們 聯絡資訊
※ 引述《jtmh ()》之銘言: :   我也是這麼覺得, :   不過如果再詳細去看 toUpperCase() 的說明: :   http://java.sun.com/javase/6/docs/api/java/lang/String.html#toUpperCase() :   "... This method is equivalent to toUpperCase(Locale.getDefault())." :   會發現有牽扯到 Locale.getDefault() 的實作, :   如果再進一步去追一下它的 source code, :   就會發現其實還有機會產生其他的 String objects. 嗯嗯, 我去稍稍追了一下source, 除了String 還包括 ConditionalSpecialCasing, Character, CharacterDataLatin1, Locale 在String的toUpperCase內,會用到 Locale 的 .getLanguage() 其直接回傳的是一個language變數, 是String型別, 所以在這之前, 它已經產生好了 Locale.getDefault() 只有在內部defaultLocale為null時要執行重新產生的碼 但是JVM在startup會執行 setDefault() 因此除外有某種意外, 使得裡面的defaultLocale變成null, 這時才會導致不得不再重新產生, 此時產生碼確實會建立String物件 其實再追Character相關的, 會發現操作除了有Locale 的 .getLanguage() 其它都在char[], int, char上面, 也就是沒動到String 如果我沒有漏看什麼的話 0.0> 這題目算出的蠻謹慎的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.219.93
jtmh:你是對的,我沒注意到 JVM 啟動時會自動 setDefault(), 05/02 01:18
jtmh:還以為 defaultLocale 會在 getDefault() 第一次執行時才設定 05/02 01:19