Re: [J2SE] Java String觀念請教?

看板java作者 (AI3767)時間17年前 (2008/05/02 00:31), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《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

05/02 01:18, , 1F
你是對的,我沒注意到 JVM 啟動時會自動 setDefault(),
05/02 01:18, 1F

05/02 01:19, , 2F
還以為 defaultLocale 會在 getDefault() 第一次執行時才設定
05/02 01:19, 2F
文章代碼(AID): #186V1eYK (java)
討論串 (同標題文章)
文章代碼(AID): #186V1eYK (java)