题目:
package csdn;
public class test2 {
public static void main(String[] args) {
Integer a=100;
Integer b=100;
System.out.println(a==b);
Integer c=200;
Integer d=200;
System.out.println(c==d);
}
}
求这个代码的输出结果。
答案:
第一个为true,第二个为false.
我们来看一下这个题,我们这里发生了装箱操作,所以我们得知道装箱过程是什么样的,我们来看一下反编译:
我们可以看到底层其实是调用了valueOf()这个方法,那我们去Integer类中找一下这个方法:
那也就是说,我们在进行自动装箱的时候,人家在底下会调用这个方法来帮我们进行装箱。
那我们再回到这个题目,这个题目在给a和b赋值的时候发生了装箱,装箱会调用valueOf()方法,那我们来理解一下这个方法:
因为a和b都是100,在这个范围之内,所以返回的都是相同的值,所以相等。
因为c和b是200,不在这个范围内,所以返回的都是new的对象,等号两边都是引用类型,比较的不是c和d的值,而是类似于地址的东西,所以不相等。
文章来源:https://www.toymoban.com/news/detail-628728.html
文章来源地址https://www.toymoban.com/news/detail-628728.html
到了这里,关于【Java】一个关于装箱的某里面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!