Java中对每种基本类型都有一个对应的包装类,这里主要讲解包装类的作用和包装类使用时的一些注意点。

包装类的作用

作用主要有以下两方面:
- 编码过程中只接收对象的情况,比如List中只能存入对象,不能存入基本数据类型;比如一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类;
- 方便类型之间的转换,比如String和int之间的转换可以通过int的包装类Integer来实现,具体如下。
int a = new Integer("123");
或者
int a = Integer.parseInt("123");

包装类使用时的注意点

这里先看一段代码:

public class StudyBox {public static void main(String[] args) {Integer a = 100, b = 100, c = 150, d = 150;Long e = 150l;System.out.println(a == b);System.out.println(c == d);System.out.println(c.equals(d));System.out.println(d.equals(e));System.out.println(e.equals(d));}}

这段代码的输出结果如下:

true
false
true
false
false

第一个、第三个输出很好理解,但是其他三个输出可能就会让人有些疑惑。

代码解释

这里以int型对应的包装类Integer为例来说明:
在上段代码中,初始化Integer类型的a,是将int型数据100装箱然后赋值给变量a,其中装箱操作使用的是静态工厂方法valueOf(int i),下面我们看一下这个方法的源码:

/*** 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) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}

在这个方法注释的第二段中,说明了这个方法一定会缓存-128到127的值,也有可能会缓存这个范围以外的值,这就是上面代码中第二个输出是false的原因。即-128到127的值会被Integer类缓存起来(在Integer类中通过IntegerCache类来实现),从valueOf(int i)的代码中可以看出,对象a和b是同一个对象,所以==比较是true;而c和d是不同的对象,所以==比较是false。

另外,使用equals()来进行对象比较时,Integer会先检查类型是否一致,若不一致直接返回false,这也就是第四个和第五个输出false的原因。具体如以下源码:

public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;
}
总结

以上内容若有错误之处,还请各位大神指点,不胜感激,同时也欢迎各位一起来探讨相关问题。

参考资料

解决Java包装类比较时遇到的问题

Java中包装类作用及注意点相关推荐

  1. Java中包装类作用

    1.编码过程中只接收对象的情况 比如List中只能存入对象,不能存入基本数据类型: 比如一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类: 2.方便类型之间的转换 比如St ...

  2. java中包装类的作用

    Java中包装类的作用 一.包装类是什么 包装类就是解决java的八种基本数据类型不面向对象的缺陷,而设计出来的一个个与每一个与基本类型相对应的类,这八种基本数据类型对应的类统称包装类(Wrapper ...

  3. Java中接口作用的理解

    关于Java中接口作用的深入理解.这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了.要把接口视作一种共同规范. / 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一 ...

  4. java中ioc作用_Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [Spring中 ...

  5. Java中包装类和基本类型的区别

    前言 在写项目的时候发现一个问题, public boolean connect(){} 还有一种写法 public Boolean connect(){} 两种写法在运行中都无报错,那有何区别呢? ...

  6. Java中@Deprecated作用、使用以及引用

    一.作用 在Java中凡是使用@Deprecated标志的类,都是不鼓励使用的类,如果使用或者进行重写,程序会发出警告. 二.场景 一般的话,使用这个注释都是该类不再使用,比如说设计类的时候,之前类存 ...

  7. java中ioc作用_java中的ioc是什么

    java中的ioc是什么 发布时间:2020-06-03 20:01:10 来源:亿速云 阅读:174 作者:Leah java中的ioc是什么相信大部分人都不太了解,为了让大家更加了解,小编给大家总 ...

  8. java中properties作用,java中Properties类的使用

    java中Properties类的使用 在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件). Propert ...

  9. java中properties作用,Java中Properties的使用详解

    Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也 ...

最新文章

  1. Java7/8 中的 HashMap 和 ConcurrentHashMap
  2. 数据告诉你史上最年轻35000分先生到底有多强?
  3. ElasticSearch教程——自定义分词器(转学习使用)
  4. 头发剪短了要快速生发_怎样生发效果最好最快?四个方法快速长出头发!
  5. 实践GoF的23的设计模式:SOLID原则(下)
  6. ssm框架使用resultful_SSM框架整合完整案例
  7. JAVA——孪生素数
  8. C# TypeDescriptor初了解
  9. 如何将大华设备通过大华SDK接入Demo工具测试视频接入?
  10. 【惯性导航姿态仪】 07 Mini INS/GPS 数据输出处理以及 C语言实现
  11. plupload android,文件上传的几种方法——plupload篇
  12. CentOS7使用mount命令来挂载CDROM
  13. 构建自己的个人信息资料库
  14. matlab的sinxx,用MATLAB程序编程:分析方程f(x)=sinx-x/2=0正根的分布情况,并用二分法求正根近似值,使误差不超过0.01....
  15. 御坂坂的c++学习之路(4)
  16. EventBus报错:and its super classes have no public methods with the @Subscribe annotation
  17. APP运营推广不简单 这些数据指标一定要看!
  18. MFC应用模态对话框和非模态对话框
  19. 基于JSP开发的电影票预订系统 JAVA MySQL
  20. C语言数组初始化为非0值

热门文章

  1. js表单提交无反应的问题
  2. 如何为mysql建立索引
  3. Cell Decomposition系列路径规划算法——ECD、ACD
  4. 预告 | 旷视成都研究院负责人刘帅成:图像对齐技术及其应用
  5. 【分治】线性时间选择(C++)
  6. 扫雷游戏-Java课程设计
  7. 开发一个安卓app-备忘录
  8. mac Android Studio 环境搭建,flutter开发环境搭建,已经加快AS的编译速度(Android mac 系统配置)
  9. BeanCopier工具
  10. PHP实现自定义if条件、动态if条件判断(店铺会员卡等级规则判断的实现)