原文出自http://www.banzg.com/archives/39.html,需要转载请注明出处。

一、什么是Java的包装类?

java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,java为每个基本类型都提供了包装类。

二、java包装类常用的几种类型

Boolean,Byte,Short,Character,Integer,Long,Float,Void

三、包装类都有共同的方法

   带有基本值参数并创建包装类对象的构造函数.如可以利用Integer包装类创建对象,Integer obj=new Integer(145);带有字符串参数并创建包装类对象的构造函数.如new Integer(“45”);生成字符串表示法的toString()方法,如obj.toString().对同一个类的两个对象进行比较的equals()方法,如obj1.eauqls(obj2);生成哈稀表代码的hashCode方法,如obj.hasCode();将字符串转换为基本值的 parseType方法,如Integer.parseInt(args[0]);可生成对象基本值的typeValue方法,如obj.intValue();

四、包装类的自动装箱、自动拆箱

首先,什么是装箱与拆箱?最简单的解释就是把最简单的数据类型用他们相对应的引用类型包装起来,使他们具有对象的特性。例如基本类型int,它所对应的包装类就是Integer。装箱与拆箱就是int与Integer之间的转换。

为了使我们的操作更加简单,jdk1.5版本给我们提供了自动拆箱与自动装箱的功能。例如:

    inti = 25;  Integer j = i;//自动装箱  intm = j;//自动拆箱

注意:对于Integer的拆装箱需要注意以下问题

  publicclassDemo {  publicstaticvoid main(String[] args) {  Integer a = 100;  Integer b = 100;  Integer c = 200;  Integer d = 200;  System.out.println(a==b);  System.out.println(a==100);  System.out.println(c==d);  System.out.println(c==200);  }  }

运行一下,结果依次为true,true,false,true
对于a100,b200大家应该可以理解,作了拆装箱,这里比较的是他们的值。但是a等于b为什么c就不等于d了?这就需要我们分析一下了
当Integer a = 100;这条语句执行的时候,java自动把它翻译成Integer a = Integer.valueOf(100);我们就来看一下valueOf这个函数:

 publicstaticInteger valueOf(inti) {       finalintoffset = 128;      if(i >= -128&& i <= 127) { // must cache       returnIntegerCache.cache[i + offset];       }      returnnewInteger(i);       }      privatestaticclass IntegerCache {       privateIntegerCache(){}      staticfinalInteger cache[] = newInteger[-(-128) + 127+1];      static{      for(inti = 0; i < cache.length; i++)       cache[i] = newInteger(i - 128);      }      }

这里看一下,当参数i是属于整型范围以内的就返回IntegerCache.cache[i]。对于IntegerCache的cache[],我们注意到static {}里面对它进行了初始化。new了所有的整型对象出来,而static{}只初始化一次,并且在对象间共享。因此,valueOf函数返回的是一开始就初始化好了的对象的引用。所以a和b都是同一个引用,因此它们相等。当然了,当参数大于127的时候,都是返回的新建对象,因此它们的引用并不等。所以说,对于Integer有特殊的地方,就是它使用了数组的缓存,目的是为了提高运行效率。

java基础之包装类相关推荐

  1. java基础数据类型包装类

    基础数据类型包装类 当一个程序要求交互式输入一个int类型的年龄时,从文本框中输入的结果肯定是String类型的.要在程序中进行相关操作,它必须先转换为int类型.因此可以使用数据类型的转换或强制转换 ...

  2. java基础数据类型包装类的作用

    在java中,提起int,float,byte这些基础数据类型,自然就会想到他们各自对应的包装类了.那么你有没有想过,java大牛们为什么会设计包装类呢? 首先,Integer等包装类更加体现了面向对 ...

  3. Java基础教程——包装类

    Java出道之时,自诩为"纯面向对象的语言",意思是之前的所谓"面向对象语言"不纯. 但是,有人指责Java也不纯--8种基本类型并非类类型.为此,Java为他 ...

  4. 【java基础】包装类,自动装箱和自动拆箱

    文章目录 基本介绍 包装类 自动装箱 自动拆箱 包装类注意事项 包装类比较 包装器内容不可变 基本介绍 有时,需要将int这样的基本类型转换为对象.所有的基本类型都有一个与之对应的类. 例如,Inte ...

  5. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)

    菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...

  6. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  7. Java数字包装类基本程序,Java基本数据类型包装类

    基础数据类型包装类 当一个程序要求交互式输入一个int类型的年龄时,从文本框中输入的结果肯定是String类型的.要在程序中进行相关操作,它必须先转换为int类型.因此可以使用数据类型的转换或强制转换 ...

  8. java 多态判断非空_跳槽涨薪季面试题之java基础(一)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 为迎接金九银十跳槽涨薪季,小编汇总了java精编版面试题,大概从java基础.java8特性.多线程.spring.springboot. ...

  9. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

最新文章

  1. scrapy下载中间件设置代理和useraget大全
  2. OSI网络七层模型简明教程
  3. Day 62 Django第三天
  4. SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)
  5. SaaS市场普及 网络推广策略最有效
  6. java wifi类_Java 接口——面向对象的精髓
  7. MySQL必知必会笔记(六)存储过程 游标 触发器
  8. 通过MD5校验游戏安装文件完整性实例演示,MD5校验工具Hash使用演示
  9. matlab 二维隐函数作图,matlab隐函数作图
  10. Linux 抓包工具 tcpdump
  11. 三菱q plc modbus通讯协议详解_三菱PLC串口通讯模块QJ71C24N和MR-JE-A的modbus通讯
  12. iOS绘制1像素的线
  13. DOS定时关机命令 windowXp
  14. 【算法设计与分析】(6)算24点问题(回溯法)
  15. 2017 闰秒 linux,闰秒为什么会导致Linux出现问题
  16. XOR Guessing
  17. 缺钱的时候怎么办:让死钱变活钱的六大妙招
  18. 写一段python求和代码
  19. 软件开发过程培训总结
  20. 【VMware】安装虚拟机、Linux操作系统

热门文章

  1. Hyperledger Fabric 链码(1) 类型
  2. C++ Primer 5th笔记(chap 13 拷贝控制)=default
  3. 初等数论--原根--怎么判断a是不是模m的原根
  4. 设计模式--解析器(Interpreter)模式
  5. VTS工具测试指定的testcase函数(以VtsHalKeymasterV4_0TargetTest为例)
  6. Linux和optee双系统中1020-1023号的中断号的使用
  7. Vue如何获取当前时间
  8. C++ priority_queue用法
  9. ubuntu codeblocks 设置用默认的gnome-terminal进行调试
  10. a[1]和1[a]——浅谈数组下标运算符