1. yyoshikaw

    No comment

    yyoshikaw
Changes in body
Source | HTML | Preview
@@ -1,25 +1,25 @@
(※以下Java6までの問題です。Java7では解決されています)
String#substringは新しい文字列をnew Stringで生成するにも関わらず切り出し前の文字列を内部(のchar配列)で保持してしまっています。
本内容は通常は意識する必要はありませんが、巨大な文字列をsubstring操作する際はメモリリーク等につながる場合がありますので注意が必要です。
(String#splitにも同様の問題があります)
```java
String s1 = "0123456789"; // -> s1内部のchar配列は {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
-String s2 = str.substring(5); // -> s2内部のchar配列は {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ({5, 6, 7, 8, 9}ではない!)
+String s2 = s1.substring(5); // -> s2内部のchar配列は {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ({5, 6, 7, 8, 9}ではない!)
System.out.println(s2); // -> "56789"
```
```java
// 対処方法1
String s3 = new String(s1.substring(5));
```
```java
// 対処方法2
String s4 = s1.substring(5).intern();
```