编写一个程序,似乎添加了数字2和2,并输出5。这是一个暗地里的比赛。
您的程序无法输出任何错误。小心记忆孔!输入是可选的。
将2+2重新定义为5并不是很有创意!别再想了,试试别的吧。
发布于 2014-05-30 16:07:26
反射确实是滥用Java的正确方法..。但你需要做的不仅仅是调整一些价值观。
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws Exception {
Class cache = Integer.class.getDeclaredClasses()[0];
Field c = cache.getDeclaredField("cache");
c.setAccessible(true);
Integer[] array = (Integer[]) c.get(cache);
array[132] = array[133];
System.out.printf("%d",2 + 2);
}
}
输出:
5
解释:
您需要对其进行更深的更改,而不是通常所能访问的。请注意,这是为Java6设计的,在JVM上没有传入任何奇怪的参数,否则会更改IntegerCache。Integer类中的 深度是整数的自由权重。这是一个从−128到+127的整数数组。通常情况下,
cache[132]
是4的位置。把它设为5。
警告:在真正的代码中这样做会让人非常不开心。
ideone代码演示。
发布于 2014-05-31 11:04:30
相当便宜的诡计,但我相信我会抓住你们中的大多数人。
int main() {
int a = 2 + 2; a++;
printf("%d",a);
return 0;
}
在这里试试
向右滚动代码。我不确定在 /Linux上,但在OSX上,滚动条不是visible.,这是在您最喜欢的代码编辑器上启用“空间可视化”的一个好理由。
发布于 2014-05-30 11:42:30
我只是喜欢你能把任何东西扔到ghci身上,而且它也会随你而动。
λ> let 2+2=5 in 2+2
5
https://codegolf.stackexchange.com/questions/28786
复制相似问题