自动装箱与自动拆箱的一些问题
今天打算复习一下Java基础,之前学的太快速了,现在暑假,好好把那些细节看一下
复习到自动装箱和自动拆箱的时候,这里有个很有趣的现象
- Integer n1 = 100;
- Integer n2 = 100;
- System.out.println(n1 == n2);
- Integer n3 = 200;
- Integer n4 = 200;
- System.out.println(n3 == n4);
你们猜猜结果是什么 第一个是true,第二个是false。有趣吧。
其实它们是相当于
- Integer n1 = Integer.valueOf(100);
- Integer n2 = Integer.valueOf(100);
- System.out.println(n1 == n2);
- Integer n1 = Integer.valueOf(200);
- Integer n2 = Integer.valueOf(200);
- System.out.println(n1 == n2);
所以那个valueOf()就是问题的关键啦,看一下这个函数的源码
- /**
- * Returns an {@code Integer} instance representing the specified
- * {@code int} value. If a new {@code Integer} instance is not
- * required, this method should generally be used in preference to
- * the constructor {@link #Integer(int)}, as this method is likely
- * to yield significantly better space and time performance by
- * caching frequently requested values.
- *
- * This method will always cache values in the range -128 to 127,
- * inclusive, and may cache other values outside of this range.
- *
- * @param i an {@code int} value.
- * @return an {@code Integer} instance representing {@code i}.
- * @since 1.5
- */
- public static Integer valueOf(int i) {
- assert IntegerCache.high >= 127;
- if (i >= IntegerCache.lo&&i<=IntegerCache.high)
- return IntegerCache.cache[i + (-IntegerCache.low)];
- return new Integer(i);
- }
所以我们知道了,对于-128到127之间的数,Integer.valueOf(99)返回的是缓存中的对象,所以两次调用valueOf返回的是同一个对象,故结果是true.而Integer.valueOf(199)返回的则是重新实例化的对象,故结果是false.
自动拆箱
- Integer n1 = 10;
- int t1 = n1;
- Integer n2 = 10;
- int t2 = n2;
- System.out.println(t1 == t2);
- Integer n1 = 199;
- int t1 = n1;
- Integer n2 = 199;
- int t2 = n2;
- System.out.println(t1 == t2);
两次的结果是true。
所以我们要注意自动装箱时候数值的范围的选择~~
转载于:https://blog.51cto.com/lovelydd/934278
自动装箱与自动拆箱的一些问题相关推荐
- Java 进阶——自动装箱和自动拆箱
1.什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a ...
- java 自动装箱自动拆箱_自动装箱和自动拆箱
自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基本类型了. 基 ...
- 第三次学JAVA再学不好就吃翔(part64)--自动装箱和自动拆箱
学习笔记,仅供参考 自动装箱和自动拆箱 装箱:把基本类型转换为包装类类型 int x = 100; Integer i1 = new Integer(x); 拆箱:把包装类类型转换为基本类型 int ...
- java 自动装箱自动拆箱,java自动装箱、自动拆箱和正常情况性能比较
自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况. package com.wmmad.test; import junit. ...
- 包装类,包装类的自动装箱和自动拆箱
目标 1)包装类的作用, 2)掌握包装类的自动装箱和自动拆箱操作. 3)掌握包装类的转换操作. 具体内容 一切皆对象,八种基本数据类型不是对象. 把Int包装成一个类,这样的一个类就可以以对象的形式操 ...
- 深入理解自动装箱和自动拆箱
一.什么是自动装箱.自动拆箱 此机制开始于jdk 1.5 java中有8种基本类型,对应8种基本类型有8个包装类. 整形 实型 布尔型 字符型 long/int/short/byte float/do ...
- 装箱和拆箱,自动装箱和自动拆箱
装箱和拆箱,自动装箱和自动拆箱 以Integer的创建为例. 装箱和拆箱 装箱:把基本数据类型转换成包装类对象(int->Integer) Integer num1=new Integer(17 ...
- 可能你不知道的,关于自动装箱和自动拆箱
包装类 我们知道,Java中包含了8种基本数据类型: 整数类型:byte.short.int.long 字符类型:char 浮点类型:float.double 布尔类型:boolean 这8种基本数据 ...
- java自动装箱和自动拆箱
Java自动装箱和自动拆箱是Java语言的一颗语法糖. 下面说一下java的自动装箱和拆箱的例子 1. 深入理解java虚拟机上的一个例子 public static void testJvmBook ...
最新文章
- ONNX MLIR应用示例(含源码链接)
- TP5部署服务器问题总结
- php提供的用户密码加密函数
- 惠普10亿美元锻造Helion云品牌
- Java笔记-jdbc传输clob到Oracle数据库
- 大数据之-Hadoop之HDFS_HDFS组成架构---大数据之hadoop工作笔记0050
- Net中的AOP系列之《方法执行前后——边界切面》
- 分布式平台下的HS(High-Security) --Shiro 授权
- ACL2020 | 什么时候值得用BERT上下文嵌入
- javascrip之prototype
- 485有时候从机接收指令没反应_多动症儿童反应慢好几拍?神经递质释放速度太慢就会出现这种问题!科学训练高效提升孩子反应力!...
- 避免踩坑--网传二进制数值和点分十进制ip之间的转换
- 几种图片去水印方法的效果对比
- markdown 设置目录跳转的简单方法
- 继电器控制电路原理解析说明
- 金蝶新建生产领料单,单据编号不能自动填写
- 解决Python打开excel异常: XLRDError: Unsupported format, or corrupt file: Expected BOF
- Phonetic symbol 清辅音 -- p
- ssl证书过期该怎么办?域名未过期证书却过期,该怎么办?
- Vue前端报错及原因分析集合
热门文章
- drm linux 内核,Linux内核DRM实现分析——基于i915
- oracle往据,指定日期查询数Oracle据库
- 浮点数正则表达式_正则表达式的邮箱,手机号,身份证号,密码
- java 顶层类_Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
- mysql创建表格1warning_MySQLMySQL创建表及相关约束
- mysql级联查询_mysql 各种级联查询后更新(update select)
- python是动态类型语言、变量不需要显示声明类型_【IT专家】第3章 Python基础
- Python列表之for循环应用
- python zipfile教程_Python模块zipfile原理及使用方法详解
- android wp8相机,体验提升明显 WP8.1相机对比专业拍摄