学员问的一个有意思的面试题:在什么情况下能够使变量a即等于1也等于2还要等于3?
分析如下:
package cn.tedu.demo;
import java.io.File;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.Arrays;
/**
* 面试题
* if( a == 1 && a == 2 && a == 3 )
* 要求括号里面返回true
* Integer
*/
public class Demo2 {
public static void main(String[] args) throws NoSuchFieldException {
Integer[] arry = getIntegerCache();
// 129:1,130:2,131:3
int index = 129;
arry[index+1] = arry[index];
arry[index+2] = arry[index];
arry[index+3] = arry[index];
Integer a = 1;
System.out.println(a == (Integer) 1 && a == (Integer) 2 && a == (Integer) 3);
// Integer a = 100;
// Integer b = 100;
// Integer c = 156;
// Integer d = 156;
// System.out.println(a == b);
// System.out.println(c == d);
}
//缓存里面存的是什么?
public static Integer[] getIntegerCache() throws NoSuchFieldException {
//是通过Integer这个类获得他内部的类或者接口
Class cache = Integer.class.getDeclaredClasses()[0];
//是获得cache里面属性
Field c = cache.getDeclaredField("cache");
Integer[] arr = null;
c.setAccessible(true);
try {
arr = (Integer[]) c.get(cache);
System.out.println(Arrays.toString(arr));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return arr;
}
}