public class interview {
public static void main(String[] args) {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);
Integer m = 1;
Integer n = 1;
System.out.println(m == n);
Integer x = 128;
Integer y = 128;
System.out.println(x == y);
}
}
答案为:
false
true
false
解析:在从基本数据类型转化为包装类的时候,调用了Integer中的valueOf()
在这两段代码中可以看出,valueOf()方法存在范围在-128~127的数组,如果int值在这个范围内则直接使用此数组里的值,否则重新new一个Integer。
所以在第三道题中是存在了两个对象,对象地址值不同则false。
public class interview {
public static void main(String[] args) {
int i = 10;
double d = 10.2;
System.out.println(i == d);
Integer i1 = 10;
Double d1 = 10.2;
System.out.println(i1 == d1);
Integer m = 1000;
double n = 1000;
System.out.println(m == n);
Integer x = 1000;
int y = 1000;
System.out.println(x == y);
}
}
答案为:
false
报错
true
true
解析:通过字节码文件可以看出是先对1000转换为了Integer,然后Integer转换为int,最后进行int to double 的基本数据类型之间的比较
public class interview {
public static void main(String[] args) {
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);
Object o2;
if(true)
o2 = new Integer(1);
else
o2 = new Double(2.0);
System.out.println(o2);
}
}
答案为:
1.0
1
解析:Java中三元表达式返回值类型要相同,强制类型转换自动向精度更高的类型转换