JAVA, 81 79 78 Bytes
JAVA (HotSpot) 71 70 Bytes
Zum Zeitpunkt meiner Veröffentlichung kürzer als andere Java-Antworten (81, später 79 Byte):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Wie von @Olivier Grégoire vorgeschlagen, kann ein weiteres Byte gespeichert werden:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Das x+=x.intern()Inkrementieren als for-Schleife würde nichts nützen, da zum Beenden der for-Anweisung immer noch ein Semikolon erforderlich ist.
Wie von @ETHproductions vorgeschlagen, x+=xfunktioniert auch nur die Verwendung von :
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Was auch von @Olivier Grégoires Tipp profitieren kann:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Meine einzigen Bedenken dabei sind, dass die Zuweisung von Daten auf dem Heap nicht garantiert ist , da eine effiziente JVM leicht erkennen kann, dass sie xder lokalen Funktion niemals entgeht. Die Verwendung von intern()vermeidet dieses Problem, da internierte Zeichenfolgen letztendlich in einem statischen Feld gespeichert werden. Allerdings generiert HotSpot einen OutOfMemoryErrorCode für diesen Code. Ich denke, das ist in Ordnung.
Update: @Olivier Gregoire wies auch darauf hin, dass der x+=xCode ausgeführt werden kann, StringIndexOutOfBoundsExceptionanstatt OOMwenn viel Speicher verfügbar ist. Dies liegt daran, dass Java den 32-Bit- intTyp verwendet, um Arrays zu indizieren (und Strings sind nur Arrays von char). Dies hat keine Auswirkung auf die x+=x.intern()Lösung, da der für letzteres erforderliche Speicher in der Länge der Zeichenfolge quadratisch ist und daher auf die Größenordnung von 2 ^ 62 zugewiesenen Bytes skaliert werden sollte.