绍兴网站的优化/网络培训机构排名前十
其一 这行代码输出什么?
System.out.println(true?new Integer(1):new Float(2));
肯定不是2,难道是1?
No,正确答案1.0
原因是编译是三目运算符问号后面的表达式类型要求一致,所以前面的Integer被自动提升为Float了。
其二
public static void main(String[] args) {/** 两个通过new生成的Integer变量永远是不相等的* (因为new生成的是两个对象,其内存地址不同)*/Integer i1 = new Integer(100);Integer j1 = new Integer(100);System.out.println(i1 == j1); //false/*包装类Integer和基本数据类型int比较时*Java会自动拆包装为int 然后进行比较*实际上就变为两个int变量的比较 */Integer i2 = new Integer(100);int j2 = 100;System.out.println(i2 == j2); //true/** 当变量值在-128~127之间时* 非new生成的Integer变量指向的是Java常量池中的对象* 而new Integer()生成的变量指向堆中新建的对象* 故两者在内存中的地址不同*/Integer i3 = new Integer(100);Integer j3 = 100;System.out.println(i3 == j3); //false /** 当变量值在-128~127之间时* 非new生成的Integer变量指向的是Jjava常量池中的对象 * 故两者在内存中的地址相同*/Integer i4 = 100;Integer j4 = 100;System.out.println(i4 == j4); //true/** 当变量值不在-128~127之间时* 非new生成Integer变量时* Java API中最终按照new Integer(i)进行处理 * 故两者在内存中的地址不同*/Integer i5 = 128;Integer j5 = 128;System.out.println(i5 == j5); //false}