引文:
無意中看到了這樣的非常規邏輯,在想前后端應該都可以實現,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);}}