GIAVA, 81 79 78 byte
JAVA (HotSpot) 71 70 byte
Più breve delle altre risposte Java al momento della pubblicazione (81, dopo 79 byte):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Come suggerito da @Olivier Grégoire, è possibile salvare un ulteriore byte:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Il posizionamento x+=x.intern()come incremento del ciclo for non aiuterebbe nulla, poiché è ancora necessario un punto e virgola per terminare l'istruzione for.
Come suggerito da @ETHproductions, anche solo usando le x+=xopere:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Che può anche beneficiare del consiglio di @Olivier Grégoire:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Il mio unico dubbio è che non è garantito l'allocazione dei dati sull'heap , poiché una JVM efficiente può facilmente rendersi conto che xnon sfugge mai alla funzione locale. L'uso intern()evita questa preoccupazione perché le stringhe internate finiscono per essere archiviate in un campo statico. Tuttavia, HotSpot genera un OutOfMemoryErrorcodice per quel codice, quindi immagino che vada bene.
Aggiornamento: @Olivier Gregoire ha anche sottolineato che il x+=xcodice può essere eseguito StringIndexOutOfBoundsExceptionpiuttosto che OOMquando è disponibile molta memoria. Questo perché Java utilizza il inttipo a 32 bit per indicizzare le matrici (e le stringhe sono solo matrici di char). Ciò non influisce sulla x+=x.intern()soluzione in quanto la memoria richiesta per quest'ultima è quadratica nella lunghezza della stringa e dovrebbe pertanto ridimensionarsi nell'ordine di 2 ^ 62 byte allocati.