请看题1:

public class IntegerDemo {public static void main(String[] args) {Integer a = 888;Integer b = 888;Integer c = 88;Integer d = 88;System.out.println(a == b);System.out.println(c == d);}
}

上面这道题输出:

false
true

因为Java的自动拆箱和自动封箱,那么

Integer a = 888;

就是相当于

Integer a = new Integer(888);

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

那为什么c===d就是指向同一个对象呢?

再来看看,Integer中部分源码

   //具体源码部分public static Integer valueOf(int i) {//i>=-128&&i<=127if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}//Integer的静态内部类private static class IntegerCache {static final int low = -128;static final int high;//常量数组static final Integer cache[];static {// high value may be configured by propertyint h = 127//省略无关代码....high = h;//初始化cache数组大小//cache的大小=127-(-128)+1=256cache = new Integer[(high - low) + 1];int j = low;for(int k = 0; k < cache.length; k++)//把-128到127的数字全部转换成Integer对象//并存入到cache数组中。cache[k] = new Integer(j++);} private IntegerCache() {}}

面试题2:

public class IntegerDemo {public static void main(String[] args) {Integer a = new Integer(88);test(a);System.out.println(a);}private void test(Integer integer){integer=new Integer(99);}
}

上面应该输出多少呢?

面试题3:

public class IntegerDemo {public static void main(String[] args) {Integer a = new Integer(88);a = 99;System.out.println(a);}
}

这里又将输出多少呢?

继续看源码:

public final class Integer extends Number implements Comparable<Integer> {//final修饰变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改//如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。private final int value;public Integer(int value) {this.value = value;}
}

面试题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。

来源: Java后端技术栈

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

  1. 用gdb搞清楚一道union相关的面试题

    题目并不是特别新鲜,不过这个题目在面试上肯定能筛选一大波人,特别是,有的题目大家看到很多次,但是每次都是简单看看,没有深入分析,结果笔试遇到差不多一样的题目时,自己又傻逼了. 搞C语言,看内存地址是一 ...

  2. python fun_一道神奇的Python面试题,你会吗?

    原标题:一道神奇的Python面试题,你会吗? 无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun: temp = [lambda x : i*x for i in ...

  3. 一道经典的JavaScript面试题

    一道经典的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227430.html

  4. 一道丧心病狂的java面试题

    转载自 一道丧心病狂的java面试题 无意中了解到如下题目,觉得蛮好. 题目如下: public class TestSync2 implements Runnable {int b = 100; s ...

  5. python网络爬虫面试题,搞定这套Python爬虫面试题(面试会so easy)

    搞定这套Python爬虫面试题(面试会so easy) 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  搞定这套Python爬虫面试题(面试会so easy).t ...

  6. 一道内存分配的面试题后续

    昨天写的题目,在VC6.0上面测试一下 一道内存分配的面试题 结果发现一个问题,发现输出结果竟然没有问题,我很慌,如果这样的输出结果没有问题的话,那肯定是跟我们的理论对不上号的. 所以我只能继续调试 ...

  7. 一道技术美术的面试题

    一道技术美术的面试题 https://zhuanlan.zhihu.com/p/27344672 一道技术美术的面试题 王滕昊 ​ 游戏开发 话题的优秀回答者 最近看越来越多的知乎小伙伴关注TA的这个 ...

  8. 转自知乎 知乎ID@方志宏 记一道简单的Java面试题

    记一道简单的Java面试题 这可能是历史上最简单的一道Java面试题 题目很简单,完成代码,判断一个整数是否是奇数 public boolean isOdd(int i) 相信相当数量的人都在已经准备 ...

  9. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

最新文章

  1. cpld xilinx 定义全局时钟_AutoSAR中的时钟同步机制
  2. 微信公众号点击菜单即可打开并登录微站的实现方法
  3. 一次难得的分库分表实践
  4. 这些名言都是有后半句的,以前都按前半句理解,太坑人!
  5. flash player for linux 64位,linux 64位系统下安装flash player插件
  6. php如何给数组取名,给表单取名可以为数组,并且可以通过php打印出来
  7. 算法训练 字符串编辑 java
  8. 城市大数据的生态模型及应用
  9. 2019第一季度海外市场手机出货量报告:华为、小米逆势增长
  10. Java 多线程编程两个简单的例子
  11. 深入掌握JMS(五):实战Topic 1
  12. 图解形态学Morphological
  13. 有道网页翻译chrome插件---我用过的最好的翻译插件
  14. 什么是网站被黑?网站被黑具体症状表现、网站被黑了怎么办
  15. writing idiomatic python翻译
  16. 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
  17. 【C/C++】【面经】2022 网易互娱面经( 游戏客户端方向 )(更新:一面;二面;)
  18. 点击不同按钮,eachart图显示不同数据,动态的控制echarts折线的条数
  19. zabbix 监控下载安装
  20. 会议信息 | BigBrain研讨会 September 21-23, CEST, 线上

热门文章

  1. Ubuntu命令行和图形界面选择设置
  2. 如何给影像添加投影_地面互动投影是如何实现的,需要哪些设备?
  3. python虚拟环境安装包_Python虚拟环境的创建和包下载过程分析
  4. 更改npm淘宝源,并设置cnpm
  5. 无符号数和有符号数之间赋值和大小比较
  6. Oracle删除重复数据并且只留其中一条数据
  7. [转] 数据库加锁 sql加锁的
  8. 在桌面应用中使用JAVA DB[组图]
  9. MapXtreme 使用技巧10例
  10. RTT的IPC机制篇——邮箱