JAVA, 81 79 78字节
JAVA(热点) 71 70字节
我发布时比其他Java回答短(81个,后来是79个字节):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
如@OlivierGrégoire所建议,可以再保存一个字节:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
放置x+=x.intern()
为for循环增量将无济于事,因为仍然需要使用分号来结束for语句。
正如@ETHproductions所建议的,也可以使用x+=x
作品:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
这也可以从@OlivierGrégoire的技巧中受益:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
我对此的唯一担忧是,不能保证在堆上分配数据,因为高效的JVM可以轻松地实现x
永远不会逃脱本地功能。使用intern()
避免了这种担忧,因为实习字符串最终最终存储在静态字段中。但是,HotSpot确实会生成OutOfMemoryError
为该代码,因此我想它还可以。
更新:@Olivier Gregoire还指出,x+=x
代码可以运行,StringIndexOutOfBoundsException
而不是OOM
在有大量内存可用时运行。这是因为Java使用32位int
类型来索引数组(而String只是的数组char
)。这不会影响x+=x.intern()
解决方案,因为后者所需的内存在字符串的长度上是平方的,因此应该按比例分配到2 ^ 62个分配字节。