引文:
无意中看到了这样的非常规逻辑,在想前后端应该都可以实现,a 是变量,或者操作a时触发了值得改变。
意义: 该问题让我们知道了一切规则都是可以被打破的,世界上的规则都是为了解释某种现象设计的。
题目:
请让判断if (a == 1 && a == 2 && a == 3)通过true的路径。
参考答案:
前端:
var a = {i: 1,valueOf: function() {if (this.i === 1) {this.i++;return 1;} else if (this.i === 2) {this.i++;return 2;} else if (this.i === 3) {this.i++;return 3;} else {return 4;}}
}if (a == 1 && a == 2 && a == 3) {console.log("Success! a=" + a);
}
后端:
@Testpublic void testA() throws NoSuchFieldException, IllegalAccessException {Class cache = Integer.class.getDeclaredClasses()[0];Field c = cache.getDeclaredField("cache");c.setAccessible(true);Integer[] array = (Integer[]) c.get(cache);array[130] = array[129];array[131] = array[129];Integer a = 1;assert a == Integer.valueOf(1) && a == Integer.valueOf(2) && a == Integer.valueOf(3) : true;assert a == (Integer)1 && a == (Integer)2 && a == (Integer)3 : true;// if (a == Integer.valueOf(1) && a == Integer.valueOf(2) && a == Integer.valueOf(3)) {if (a == (Integer)1 && a == (Integer)2 && a == (Integer)3) {System.out.println("success! a=" + a);} else {System.out.println("false! a=" + a);}}
或者:
public static void main(String[] args) {// 写一段if (a == 1 && a==2 && a==3) 判断,结果为true的代码class Integer {private int value = 0;public Integer() {this.value = value;}// 添加构造方法public Integer(int i) {this.value = value;}public Integer valueOf(int i) {return new Integer(i);}@Overridepublic boolean equals(Object obj) {System.out.println("value=========" + value);value++;System.out.println("value=========" + value);return true;}@Overridepublic int hashCode() {return value;}}Integer a = new Integer(1);if (a.equals(new Integer(1)) && a.equals(new Integer(2)) && a.equals(new Integer(3))) {System.out.println("success! a=" + a.value);} else {System.out.println("false! a=" + a.value);}}