发生自动装箱与拆箱的java基本类型与其包装类

                 
基础数据类型(primitive data type) byte short int long double float char boolean
封装类(wrapper) Byte Short Integer Long Double Float Character Boolean

装箱(Autoboxing)

装箱定义:Java自动将基础数据类型转换成对应的封装类。

装箱原理:自动装箱时编译器调用valueOf将原始类型值转换成对象。

      valueOf方法如下:

      

public static Integer valueOf(int i) {  if(i >= -128 && i <= IntegerCache.high)  //IntegerCache.high =127return IntegerCache.cache[i + 128];  //当-128<=i<=127else  return new Integer(i);  //当i>127或i<-128}  

触发时机:1.方法需要传入封装类却传入的是基本数据类型;2.封装类型变量引用基本类型。

eg: Integer i = 10;相当于Integer i = Integer.valueOf(10);

拆箱(Unboxing)

拆箱定义:将一个封装类的变量赋值给相应原始数据类型的变量.

拆箱原理:自动拆箱过程会调用obj.xxxValue方法

触发时机:当一个基础数据类型与封装类进行==、+、-、*、/运算时,会将封装类进行拆箱,对基础数据类型进行运算

eg:

  Integer i = 10;//装箱
  int x = i.intValue();//拆箱

注意:"=="与"equals"

1.当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程);

2.对于包装器类型,equals方法并不会进行类型转换

3.equals的源码如下

@Override
public boolean equals(Object o) {return (o instanceof Integer) && (((Integer) o).value == value); }equal比较的是内容本身,并且我们也可以看到equal的参数是一个Object对象,我们传入的是一个int类型,所以首先会进行装箱,然后比较。

它必须满足两个条件才为true:    a、类型相同    b、内容相同

对于valueOf方法1.Integer派别:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
类型 相同对象范围 不同对象范围
Integer [-128,127) i>=128||i<-127
Short [-128,127) i>=128||i<-127
Long [-128,127) i>=128||i<-127
Character c<=127 c>127
  2.Double派别:Double、Float的valueOf方法的实现是类似的。每次都返回不同的对象。

3.对于Boolean
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(boolean b) {return b ? Boolean.TRUE : Boolean.FALSE; }
 

转载于:https://www.cnblogs.com/zhouj/p/7868619.html

java基础——自动装箱与拆箱相关推荐

  1. [Java基础]自动装箱和拆箱

    自动装箱和拆箱:

  2. Java的自动装箱与拆箱详细分析

    Java的自动装箱与拆箱详细分析 1. 既然说是装箱与拆箱,那么到底是装的什么,拆的什么? 装箱:将基本数据类型封装起来,用他对应的引用类(包装类)来处理 拆箱:就是把引用类里面的基本数据拆出来 2. ...

  3. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  4. 一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  5. 详解Java的自动装箱与拆箱(Autoboxing and unboxing)

    一.什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程 //自动装箱 Integer total = 99;//自定拆箱 int totalprim = total; 简单一点说,装箱就 ...

  6. java装箱_谈谈Java的自动装箱和拆箱

    Java作为面向对象语言,有人认为所看到的都是对象,事实上,在Java SE 5之前,基本类型默认并不是采用对象存在的如果您想要把基本类型作为对象来处理,就必须自行转换,不过,在Java SE 5之后 ...

  7. Java之自动装箱与拆箱

    什么是自动装箱与拆箱 1,来由 Java是一种面向对象编程的语言,但他同时也提供了基本数据类型,提供基本数据类型是出于性能方面的考虑:因为使用对象来处理即使是最简单的计算,系统也销也比较大. Java ...

  8. Java 包装类 自动装箱和拆箱

    包装类(Wrapper Class) 包装类是针对于原生数据类型的包装. 因为有8个原生数据类型,所以对应有8个包装类. 所有的包装类(8个)都位于java.lang下. Java中的8个包装类分别是 ...

  9. java的自动装箱和拆箱,Java中的自动装箱和拆箱是什么?

    当我们用任何语言编写程序时,大多数时候我们使用原始数据类型,.但是,在面向对象编程领域,有些情况下原始数据类型会出现不足,而Java就是其中之一.为了克服原始数据类型的缺点,我们 当我们用任何语言编写 ...

  10. Java的自动装箱与拆箱

    为什么80%的码农都做不了架构师?>>>    public class Test {public static void main(String[] args) {Integer ...

最新文章

  1. odoo开发笔记--一个模块显示两个一级菜单
  2. 成为顶尖机器学习算法专家需要知道哪些算法?
  3. ReactJS入门之JSX语法
  4. SpringBoot之MongoTemplate的查询可以怎么耍
  5. 一个技术预案,让老板当场喊出了“奥利给”
  6. 循环单链表 python_循环单链表报错
  7. 试验设计与matlab数据分析 下载,试验设计与MATLAB数据分析
  8. 基于wifi的温度采集与控制系统
  9. 猿创征文|弃文从工,从小白到蚂蚁工程师,我的 Java 成长之路
  10. QGIS空间数据分析——空间数据基本处理与计算
  11. 弘辽科技:拼多多改销量是什么意思?
  12. Golang 同步等待组(WaitGroup)
  13. zigzag走线原理及应用
  14. 【送书福利-第七期】《分布式中间件核心原理与RocketMQ最佳实践》
  15. 外地人,在上海报考驾照
  16. 知物由学 | APP大瘦身,新一代AAB框架下的安全加固之道
  17. 心电电路算法滤波_一种新型心电信号滤波电路的制作方法
  18. 搭建虚拟Web主机(基于域名、IP、端口)
  19. 规划 程序员的35岁危机
  20. 实现一个联系客服对话框的前端部分

热门文章

  1. dispatch_async 与 dispatch_get_global_queue 的使用方法
  2. 继承求不同形状图形的周长和面积
  3. RabbitMQ---9、消息确认机制(事务+Confirm)
  4. LVM基础详细说明及动态扩容lvm逻辑卷的操作记录
  5. 编程之美 4.7蚂蚁爬杆
  6. 安卓listview控件使用
  7. 如何编程访问infopath字段
  8. 企业销售管理现状分析与解决思路(转)
  9. 数据结构——二叉查找树
  10. 使用Struts2和jQuery EasyUI实现简单CRUD系统(五)——jsp,json,EasyUI的结合