1.自动拆装箱是什么?(是什么)

自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱.

java中有8中基本的数据类型,这八种基本的数据类型都有对应的封装类型,下面是对应关系:

int——Integer

float——Float

double——Double

byte——Byte

long——Long

char——Character

boolean——Boolean

short——Short

2.java为什么要引入自动装箱和拆箱的功能?(为什么)举个例子:主要是用于java集合中,List list=new ArrayList();

list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象,基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。

实现原理:javac编译器的语法.

3.又是怎么实现的呢?(怎么做)

(举个例子)

装箱:将基本类型转换成包装类对象int i=10;Integer x=new Integer(i);手动装箱Integer y=10;自动装箱拆箱:将包装类对象转换成基本类型的值Integer j=new Integer(8);int m=j.intValue();//手动拆箱int n=j;//自动拆箱

看下面这段代码,为什么?(T为true,F为false)

public class Main {

public static void main(String[] args) {

Integer a = 10;

Integer b = 20;

Integer c = 30;

Integer d = 30;

Integer e = 320;

Integer f = 320;

Long g = 30L;

Long h = 20L;

System.out.println(c==d);//T

System.out.println(e==f);//F

System.out.println(c==(a+b));//T

System.out.println(c.equals(a+b));//T

System.out.println(g==(a+b));//

System.out.println(g.equals(a+b));

System.out.println(g.equals(a+h));

}

}

解释:

因为自动装箱,自动调用valueOf方法.

public static Integer valueOf(int i) {//Integer包装类的

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

Integer的valueOf方法中一句判断,i >= -128 && i <= IntegerCache.high

如果数值在-128和127之间,就直接调用IntegerCache类,返回缓存中的数据,自然是同一个对象.

否则新建一个Integer对象.

(Double包装类的valueOf方法直接新建一个新对象)

(Boolean包装类valueOf方法,返回 (b ? TRUE : FALSE),)其他的请自行查看,判断.

同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值,其实就是自动装箱的相反操作.

4.注意点(弊端):

容易生成无用对象,因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作.

java什么是拆装箱_JAVA自动拆装箱相关推荐

  1. java double 装箱_Java自动拆箱和装箱

    一.什么是装箱/拆箱 在讲之前,得先提一下为什么两个概念:基本数据类型及其包装类,我们都知道Java是一种面向对象的语言,但是Java中的基本数据类型是不面向对象的,这时在使用中便会存在诸多的不便,为 ...

  2. java 包装类缺点_Java 自动拆箱和自动装箱学习笔记

    Java 自动拆箱和自动装箱学习笔记 详情参考以下 1. 概述 Java 中的自动装箱和自动拆箱算是一种语法糖,也就是在编译阶段编译器在合适的情况下帮我们的做了自动拆箱和自动装箱. 众所周知,Java ...

  3. java自动装箱的好处_Java自动装箱、自动拆箱

    一.前言 Java自动装箱和自动拆箱是JDK5.0版本提供的新特性,所以在JDK5.0后的版本中都可以使用,之前的版本则不支持该特性. 理解自动装箱和自动拆箱需要先对java中的8种原始数据类型和相对 ...

  4. java中为什么自动装箱拆箱_Java自动装箱和自动拆箱的理解

    Java自动装箱和自动拆箱的理解 1.代码 public class AutoBoxing { public static void main(String[] args) { Integer a = ...

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

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

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

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

  7. Java包装类与基本数据类型的自动 手动装箱与自动 手动拆箱

    Java包装类与基本数据类型的自动 手动装箱与自动 手动拆箱 **自动装箱与拆箱**,实现代码如下: /*** 装箱 : 基本数据类型-----> 包装类* 拆箱: 包装类-------> ...

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

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

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

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

最新文章

  1. android 拖动数字选择,拖放android 3.x导致illegalStateException之后的小数字拖动
  2. 漫漫MySQL之路(1.MySQL简介和诞生)
  3. Docker进阶-资源管理Swarm+Portainer
  4. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
  5. inputstreamreader 编码不完整_素材编码对剪辑效率的影响
  6. 0-java常见2000英语单词
  7. [apk破解]AirPin,无告用户书,无升级提示
  8. PS长图快速切片_PS最常用的100多个快捷键
  9. 《畅玩NAS》家庭 NAS 服务器搭建方案
  10. 移动、联通、电信手机号码开头分别是什么?
  11. 玩转Fasttext
  12. 二维数组的花式遍历技巧盘点
  13. 用 Python 写一个俄罗斯方块游戏
  14. 综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍
  15. SpringBoot访问静态资源(图片)
  16. pythonUI自动化测试selenium安装使用
  17. 老猿学5G扫盲贴:推荐三篇介绍HTTP2协议相关的文章
  18. Codeforces868E Policeman and a Tree -- DP
  19. 媒体报道的要害在于“真假”而不是“善恶”
  20. 使用多进程教你下载 m3u8 加密或非加密视频

热门文章

  1. 自动化办公-PDF篇
  2. anycast隧道_讲述IPv6网络中的选播概述及Anycast困难解决方法
  3. php织梦模板上传,织梦模板让模型里的图片字段支持本地上传的办法
  4. 添加网卡bonding
  5. 求取字符串的最大子串
  6. Kettle(五)分页抽取、插入数据
  7. 【转】搜索功能的成本有多高?
  8. TiaPortal出错需要关闭原因分析
  9. 由于使用计算机编制会计报表,由于使用计算机编制会计报表,定义了会计报表之间的勾稽关系,可根据需要随时随意生成及输出会计报表。()...
  10. 新造车的2022:特斯拉神话破灭,蔚小理还不算赢