搞清楚一道关于Integer的面试题

请看题1:面试

   {
       ([] ) {
           ;
           ;
           ;
           ;
        ..(  );
        ..(  );
    }
}

上面这道题输出:ide

false
true

由于Java的自动拆箱和自动封箱,那么spa

Integer a = 888;

就是至关于orm

Integer a = new Integer(888);

天然上面的变量a和b都是各自指向不一样的对象引用地址。那么答案就确定是false。对象

那为何c===d就是指向同一个对象呢?内存

再来看看,Integer中部分源码ci

    
       ( ) {
        
         (  .    .)
             .[  (.)];
          ();
    }
    
        {
             ;
           ;
        
           [];

         {
            
                
            
              ;
            
            
               [(  )  ];
               ;
            (   ;   .; )
                
                
                []   ();
        } 
        () {}
    }

面试题2:源码

   {
       ([] ) {
            ();
        ();
        ..();
    }
      ( ){
         ();
    }
}

上面应该输出多少呢?it

面试题3:form

   {
       ([] ) {
            ();
          ;
        ..();
    }
}

这里又将输出多少呢?

继续看源码:

        {
  
  
     ;
   ( ) {
     .  ;
 }
}

面试题3中的a=99至关于a=new Integer(99);从新给把一个新的对象引用地址给了a,因此a变了,最后输出是99。

那么面试题2呢?

咱们都知道在Java中,Java 只有值传递,只不过值传递分为:内存中数值的值传递以及内存地址数值的值传递,传递一个Integer变量参数进去,其实是构建了一个副本,经过这个副本咱们只能去修改原来Integer变量的非final成员变量(假若有的话,也能够是其余类型),上面也说了,若是去修改Integer类型的final变量,那么是会新new一个Integer变量,去覆盖这个变量副本,因此原来的Integer a变量仍是原来的,仅仅是test这个方法里的副本变量变了,这么理解就清楚了。因此面试题2 输出88。

相关文章
相关标签/搜索