今天打算复习一下Java基础,之前学的太快速了,现在暑假,好好把那些细节看一下

复习到自动装箱和自动拆箱的时候,这里有个很有趣的现象

  1. Integer n1 = 100;
  2. Integer n2 = 100;
  3. System.out.println(n1 == n2);
  4. Integer n3 = 200;
  5. Integer n4 = 200;
  6. System.out.println(n3 == n4);

你们猜猜结果是什么  第一个是true,第二个是false。有趣吧。

其实它们是相当于

  1. Integer n1 = Integer.valueOf(100);
  2. Integer n2 = Integer.valueOf(100);
  3. System.out.println(n1 == n2);
  4. Integer n1 = Integer.valueOf(200);
  5. Integer n2 = Integer.valueOf(200);
  6. System.out.println(n1 == n2);

所以那个valueOf()就是问题的关键啦,看一下这个函数的源码

  1. /**
  2. * Returns an {@code Integer} instance representing the specified
  3. * {@code int} value.  If a new {@code Integer} instance is not
  4. * required, this method should generally be used in preference to
  5. * the constructor {@link #Integer(int)}, as this method is likely
  6. * to yield significantly better space and time performance by
  7. * caching frequently requested values.
  8. *
  9. * This method will always cache values in the range -128 to 127,
  10. * inclusive, and may cache other values outside of this range.
  11. *
  12. * @param  i an {@code int} value.
  13. * @return an {@code Integer} instance representing {@code i}.
  14. * @since  1.5
  15. */
  16. public static Integer valueOf(int i) {
  17. assert IntegerCache.high >= 127;
  18. if (i >= IntegerCache.lo&&i<=IntegerCache.high)
  19. return IntegerCache.cache[i + (-IntegerCache.low)];
  20. return new Integer(i);
  21. }

所以我们知道了,对于-128到127之间的数,Integer.valueOf(99)返回的是缓存中的对象,所以两次调用valueOf返回的是同一个对象,故结果是true.而Integer.valueOf(199)返回的则是重新实例化的对象,故结果是false.

自动拆箱

  1. Integer n1 = 10;
  2. int t1 = n1;
  3. Integer n2 = 10;
  4. int t2 = n2;
  5. System.out.println(t1 == t2);
  1. Integer n1 = 199;
  2. int t1 = n1;
  3. Integer n2 = 199;
  4. int t2 = n2;
  5. System.out.println(t1 == t2);

两次的结果是true。

所以我们要注意自动装箱时候数值的范围的选择~~

转载于:https://blog.51cto.com/lovelydd/934278

自动装箱与自动拆箱的一些问题相关推荐

  1. Java 进阶——自动装箱和自动拆箱

    1.什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a ...

  2. java 自动装箱自动拆箱_自动装箱和自动拆箱

    自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基本类型了. 基 ...

  3. 第三次学JAVA再学不好就吃翔(part64)--自动装箱和自动拆箱

    学习笔记,仅供参考 自动装箱和自动拆箱 装箱:把基本类型转换为包装类类型 int x = 100; Integer i1 = new Integer(x); 拆箱:把包装类类型转换为基本类型 int ...

  4. java 自动装箱自动拆箱,java自动装箱、自动拆箱和正常情况性能比较

    自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况. package com.wmmad.test; import junit. ...

  5. 包装类,包装类的自动装箱和自动拆箱

    目标 1)包装类的作用, 2)掌握包装类的自动装箱和自动拆箱操作. 3)掌握包装类的转换操作. 具体内容 一切皆对象,八种基本数据类型不是对象. 把Int包装成一个类,这样的一个类就可以以对象的形式操 ...

  6. 深入理解自动装箱和自动拆箱

    一.什么是自动装箱.自动拆箱 此机制开始于jdk 1.5 java中有8种基本类型,对应8种基本类型有8个包装类. 整形 实型 布尔型 字符型 long/int/short/byte float/do ...

  7. 装箱和拆箱,自动装箱和自动拆箱

    装箱和拆箱,自动装箱和自动拆箱 以Integer的创建为例. 装箱和拆箱 装箱:把基本数据类型转换成包装类对象(int->Integer) Integer num1=new Integer(17 ...

  8. 可能你不知道的,关于自动装箱和自动拆箱

    包装类 我们知道,Java中包含了8种基本数据类型: 整数类型:byte.short.int.long 字符类型:char 浮点类型:float.double 布尔类型:boolean 这8种基本数据 ...

  9. java自动装箱和自动拆箱

    Java自动装箱和自动拆箱是Java语言的一颗语法糖. 下面说一下java的自动装箱和拆箱的例子 1. 深入理解java虚拟机上的一个例子 public static void testJvmBook ...

最新文章

  1. ONNX MLIR应用示例(含源码链接)
  2. TP5部署服务器问题总结
  3. php提供的用户密码加密函数
  4. 惠普10亿美元锻造Helion云品牌
  5. Java笔记-jdbc传输clob到Oracle数据库
  6. 大数据之-Hadoop之HDFS_HDFS组成架构---大数据之hadoop工作笔记0050
  7. Net中的AOP系列之《方法执行前后——边界切面》
  8. 分布式平台下的HS(High-Security) --Shiro 授权
  9. ACL2020 | 什么时候值得用BERT上下文嵌入
  10. javascrip之prototype
  11. 485有时候从机接收指令没反应_多动症儿童反应慢好几拍?神经递质释放速度太慢就会出现这种问题!科学训练高效提升孩子反应力!...
  12. 避免踩坑--网传二进制数值和点分十进制ip之间的转换
  13. 几种图片去水印方法的效果对比
  14. markdown 设置目录跳转的简单方法
  15. 继电器控制电路原理解析说明
  16. 金蝶新建生产领料单,单据编号不能自动填写
  17. 解决Python打开excel异常: XLRDError: Unsupported format, or corrupt file: Expected BOF
  18. Phonetic symbol 清辅音 -- p
  19. ssl证书过期该怎么办?域名未过期证书却过期,该怎么办?
  20. Vue前端报错及原因分析集合

热门文章

  1. drm linux 内核,Linux内核DRM实现分析——基于i915
  2. oracle往据,指定日期查询数Oracle据库
  3. 浮点数正则表达式_正则表达式的邮箱,手机号,身份证号,密码
  4. java 顶层类_Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
  5. mysql创建表格1warning_MySQLMySQL创建表及相关约束
  6. mysql级联查询_mysql 各种级联查询后更新(update select)
  7. python是动态类型语言、变量不需要显示声明类型_【IT专家】第3章 Python基础
  8. Python列表之for循环应用
  9. python zipfile教程_Python模块zipfile原理及使用方法详解
  10. android wp8相机,体验提升明显 WP8.1相机对比专业拍摄