java 自动装箱与拆箱

这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:

java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱);

其实按照我自己的理解自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象;例如用int来举例:

//声明一个Integer对象
Integer num = 10;
//以上的声明就是用到了自动的装箱:解析为
Integer num = new Integer(10);

以上就是一个很好的体现,因为10是属于基本数据类型的,原则上它是不能直接赋值给一个对象Integer的,但jdk1.5后你就可以进行这样的声明,这就是自动装箱的魅力
自动将基本数据类型转化为对应的封装类型。成为一个对象以后就可以调用对象所声明的所有的方法

自动拆箱:故名思议就是将对象重新转化为基本数据类型:

//装箱
Integer num = 10;
//拆箱int num1 = num;

自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除

Integer num = 10;
//进行计算时隐含的有自动拆箱
System.out.print(num--);

哈哈 应该感觉很简单吧,下面我再来讲点稍微难点的,是稍微
看下面一个例子

//在-128~127 之外的数Integer num1 = 297;   Integer num2 = 297;           System.out.println("num1==num2: "+(num1==num2));                    // 在-128~127 之内的数 Integer num3 = 97;   Integer num4 = 97;   System.out.println("num3==num4: "+(num3==num4)); 

打印的结果是:num1==num2: false    num3==num4: true

很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)

为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;明白了吧

以上的现象是由于使用了自动装箱所引起的,如果你没有使用自动装箱,而是跟一般类一样,用new来进行实例化,就会每次new就都一个新的对象;

这个的自动装箱拆箱不仅在基本数据类型中有应用,在String类中也有应用,比如我们经常声明一个String对象时:

String str = "sl";
//代替下面的声明方式
String str = new String("sl");
来源: <http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html>

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/ssslinppp/p/4651368.html

【转】java 自动装箱与拆箱相关推荐

  1. Java自动拆装箱面试_跟王老师学泛型(二):Java自动装箱与拆箱

    Java 自动装箱与拆箱(Autoboxing and unboxing) 主讲教师:王少华 QQ群:483773664 学习目标: 掌握Java 基本数据对应的包装类 掌握Java 自动装箱与拆箱 ...

  2. Java 自动装箱与拆箱

    Java 自动装箱与拆箱 装箱就是自动将基本数据类型转换为包装器类型(int–>Integer):调用方法:Integer 的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本 ...

  3. java的自动装箱_详解Java 自动装箱与拆箱的实现原理

    详解Java 自动装箱与拆箱的实现原理 发布于 2020-7-4| 复制链接 本篇文章主要介绍了详解Java 自动装箱与拆箱的实现原理,小妖觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小妖 ...

  4. java list装箱,Java 自动装箱和拆箱

    Java 自动装箱和拆箱 在本教程中,我们将借助示例学习Java自动装箱和拆箱. Java自动装箱-包装器对象的原始类型 在自动装箱中,Java编译器会自动将原始类型转换为其相应的包装器类对象.例如, ...

  5. Java进阶(三十七)java 自动装箱与拆箱

    java 自动装箱与拆箱是jdk1.5以后才引入的新的内容.java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装称为装箱,解包装称为拆箱): 其实按照我自己的理解自动 ...

  6. Java自动装箱与拆箱及其陷阱

    2019独角兽企业重金招聘Python工程师标准>>> 在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时 ...

  7. Java自动装箱与拆箱

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  8. java自动装箱和拆箱_关于java自动装箱和自动拆箱

    自动装箱和拆箱是一个老生常谈的问题了,今天我们谈一下我对这两个概念的理解. 一.自动装箱 java中一共有八种基本类型的数据,对于这些基本类型的数据都有一个对应的包装器类型.比如int--Intege ...

  9. 自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...

    1:前言 相信大家都在面试中都被问到过一个问题,这个问题也是近年来面试官刁难人比较常见的一个问题,所以也被大家所熟知了,本质上也很简单,但是也是非常基础的一个题目. Integer a = 100; ...

最新文章

  1. C语言结束输入(两种方法)
  2. Zabbix3的离线安装
  3. 已知三角形三点坐标求角度_高中数学:椭圆相关角度的最值问题
  4. 膜拜大佬!不同层级的Android开发者的不同行为,社招面试心得
  5. 大整数乘法--leetcode Multiply Strings
  6. rabbitmq消息重回队列
  7. es6 Mixin 模式的实现
  8. tomcat性能调优和性能监控(visualvm)
  9. 爬取两万多条租房数据,算算在广州你能「活到」第几集?
  10. android 多线程 加锁,android 多线程 — 从一个小例子再次品位多线程
  11. 全栈工程师可以分为哪几类?
  12. DXperience 7.1.1
  13. DH参数与URDF盲点
  14. Python针对Excel数据的处理(部分)
  15. 论文阅读笔记:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieva
  16. 因子分析法(Matlab与SPSS对比)
  17. 解决winform中的panel重绘闪烁问题
  18. signature=e7b038f264f5a1cf5b8e81732b377b41,不同养生功法对2型糖尿病伴失眠患者抑郁,焦虑和睡眠质量的影响...
  19. twilio php 发送短信,如何使用 Twilio 实现语音和短信功能 (PHP) | Microsoft Docs
  20. 多地推广应用电子劳动合同,君子签赋能人力资源管理数字化

热门文章

  1. C#判断Textbox是否为数字
  2. 类中定义自身类的对象
  3. CentOS7 安装 MySQL 和简单优化
  4. 第7章:MapReduce编程
  5. 客户信息管理系统——Java
  6. c++11 chrono
  7. 关于华为海思Hi35XX系列开发的思考与总结
  8. Linux操作系统下三种配置环境变量的方法(linux下几种profile执行顺序)
  9. Index of Unix
  10. VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)