作者AI3767 (AI3767)
看板java
标题Re: [J2SE] Java String观念请教?
时间Fri May 2 00:31:34 2008
※ 引述《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
1F:推 jtmh:你是对的,我没注意到 JVM 启动时会自动 setDefault(), 05/02 01:18
2F:→ jtmh:还以为 defaultLocale 会在 getDefault() 第一次执行时才设定 05/02 01:19