Java知多少(24)包装类、拆箱和装箱详解

虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。

这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得多。为解决此类问题 ,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。

基本数据类型及对应的包装类
基本数据类型 对应的包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。

基本类型和对应的包装类可以相互装换:

  • 由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;
  • 包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。

包装类的应用

八个包装类的使用比较相似,下面是常见的应用场景。

1) 实现 int 和 Integer 的相互转换

可以通过 Integer 类的构造方法将 int 装箱,通过 Integer 类的 intValue 方法将 Integer 拆箱。例如:

 1 public class Demo {
 2     public static void main(String[] args) {
 3         int m = 500;
 4         Integer obj = new Integer(m);  // 手动装箱
 5         int n = obj.intValue();  // 手动拆箱
 6         System.out.println("n = " + n);
 7
 8         Integer obj1 = new Integer(500);
 9         System.out.println("obj 等价于 obj1?" + obj.equals(obj1));
10     }
11 }

运行结果:

n = 500
obj 等价于 obj1?true

2) 将字符串转换为整数

Integer 类有一个静态的 paseInt() 方法,可以将字符串转换为整数,语法为:

1 parseInt(String s, int radix);

s 为要转换的字符串,radix 为进制,可选,默认为十进制。

下面的代码将会告诉你什么样的字符串可以转换为整数:

 1 public class Demo {
 2     public static void main(String[] args) {
 3         String str[] = {"123", "123abc", "abc123", "abcxyz"};
 4
 5         for(String str1 : str){
 6             try{
 7                 int m = Integer.parseInt(str1, 10);
 8                 System.out.println(str1 + " 可以转换为整数 " + m);
 9             }catch(Exception e){
10                 System.out.println(str1 + " 无法转换为整数");
11             }
12         }
13     }
14 }

运行结果:

123 可以转换为整数 123
123abc 无法转换为整数
abc123 无法转换为整数
abcxyz 无法转换为整数

3) 将整数转换为字符串

Integer 类有一个静态的 toString() 方法,可以将整数转换为字符串。例如:

1 public class Demo {
2     public static void main(String[] args) {
3         int m = 500;
4         String s = Integer.toString(m);
5         System.out.println("s = " + s);
6     }
7 }

运行结果:

s = 500

自动拆箱和装箱

上面的例子都需要手动实例化一个包装类,称为手动拆箱装箱。Java 1.5(5.0) 之前必须手动拆箱装箱。

Java 1.5 之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。例如:

 1 public class Demo {
 2     public static void main(String[] args) {
 3         int m = 500;
 4         Integer obj = m;  // 自动装箱
 5         int n = obj;  // 自动拆箱
 6         System.out.println("n = " + n);
 7
 8         Integer obj1 = 500;
 9         System.out.println("obj 等价于 obj1?" + obj.equals(obj1));
10     }
11 }

运行结果:

n = 500
obj 等价于 obj1?true

自动拆箱装箱是常用的一个功能,需要重点掌握。

系列文章:

Java知多少(1)语言概述

Java知多少(2)虚拟机(JVM)以及跨平台原理

Java知多少(3) 就业方向

Java知多少(4)J2SE、J2EE、J2ME的区别

Java知多少(5) Java开发环境的搭建

Java知多少(6)第一个程序示例

Java知多少(7)类与对象

Java知多少(8)类库及其组织结构

Java知多少(9) import及Java类的搜索路径

Java知多少(10)数据类型及变量

Java知多少(11)数据类型转换

Java知多少(12)运算符

Java知多少(13)流程控制

Java知多少(14)数组

Java知多少(15)字符串

Java知多少(16)StringBuffer与StringBuider

Java知多少(17)强调一下编程风格

Java知多少(18)类的定义及其实例化

Java知多少(19)访问修饰符(访问控制符)

Java知多少(20)变量的作用域

Java知多少(21)this关键字详解

Java知多少(22)方法重载

Java知多少(23)类的基本运行顺序

Java知多少(24)包装类、拆箱和装箱详解

时间: 2024-11-01 21:52:11

Java知多少(24)包装类、拆箱和装箱详解的相关文章

有关包装类拆箱、装箱和整型与字符串型之间的转换

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5462489.html 1.8种基本数据类型都有各自的包装类,其对应关系为: 基本————————————包装类 byte————————————Byte short———————————Short char————————————Char int————————————Integer long————————————Long float————————————Float double———

包装类 拆箱和装箱的注意事项

public static void main(String[] args) { Integer a=1000; Integer b=1000; System.out.println(a==b);//false System.out.println(a.equals(b));//true // System.out.println("###############"); /*Integer c=127; Integer d=127;*/ /*System.out.println(c==

Java中的拆箱和装箱

首先说一下Java中的包装类,Java语言是一个面向对象的语言,但是Java中的基本数据类型却不是面向对象的,这在实际使用时存在很多的不便(比如,我们不能直接想集合Collections中放入原始类型值,因为集合只接收对象).为了解决这个不足,在设计类的是为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class). 基本数据类型 包装类 byte Byte boolean Boolean short Short char Charact

拆箱与装箱

拆箱与装箱是一个早就接触的知识点,但是自己并没有系统的总结过,今天我们就来看一下: 一.首先介绍几个知识点: 值类型: 1. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null. 2. 值类型超出作用范围系统自动释放内存. 3. 主要由两类组成:结构,枚举(enum),结构分为以下几类: 1. 整型(Sbyte.Byte.Char.Short.Ushort.Int.Uint.Long.Ulong) 2. 浮点型(Float.Double) 3. decimal 4. bool 5. 

C#之拆箱,装箱

C#的数据类型分为三类,值类型,引用类型和指针类型.指针类型只能用于不安全模式,而值类型和引用类型通过拆箱和装箱机制可以相互转换,通过中间的object类型,所以C#的所有种类直接或间接地从object类种类派生而来. 值类型 值类型数据存储在栈中,栈用于存放固定长度的数据,分为简单类型,结构类型和枚举类型. 结构类型:把不同类型的数据组合在一起,便于使用.跟类相似,包含数据成员和函数成员的数据结构,类类型是一种引用类型.结构类型用关键字Struct定义,可以嵌套定义. 枚举类型:成员只能是整数

拆箱,装箱,枚举,结构

枚举: 1.不能定义自己的方法 2.它们不能实现接口 3.不能定义属性和索引器 4.枚举成员之间用“,”隔开 5.枚举成员如果没有赋值,那么它的第一个值默认为0 6.后面的成员取值是前一个成员取值+17.枚举成员只能赋值为整型 类与结构:1.类和结构都是创建对象的模版2.结构是值类型,类是引用类型,结构不能有析构函数3.类可以有析构函数结构不能声明默认构造函数(没有参数的构造函数)4.结构可以声明构造函数,但他们必须带参数,并且需要把所有字段都要赋值 5.在结构中初始化实例字段是错误的,在类中是

拆箱和装箱

1.拆箱和装箱,我们都知道的是 装箱:就是将值类型转换为引用类型拆箱:将引用类型转换为值类型 2.那么看下面一个例子: string str=“123”int n=Convert.ToInt32(str): string是引用类型,int为值类型.那么,此处有没有发生拆装箱呢 答案是:没有 原因:看两种类型是否发生了装箱或拆箱,要看这两种类型是否存在继承关系.有继承关系才有可能发生装箱和拆箱 3.现在,我们只知道拆装箱的定义,那么拆装箱到底给我们的应用程序带来了好处还是坏处呢? 我们可以看下面一

c# 的引用类型和值类型和数据的拆箱和装箱

c#中引用类型和值类型的区分: 一般的以calss声明的变量的类型是引用类型的,引用类型是存放到内存的堆上存放的是数据的地址.值类型是像int float 还有struct等属于值类型的数据类型,值类型的数据是存放在堆栈上的存放的数据本身. 拆箱和装箱: 我们可以用一个例子来理解装箱和拆箱的关系和作用.我们都知道小时候在村里有哪种你给他一些铝制品他可以给你溶成一个你想要的其他的铝制器件.装箱和拆箱就是这个原理.例如:你想把一种数据类型转化为另一种数据类型,int16到int32的数据类型的转化,

第十七节:易混淆的概念(静态和非静态、拆箱和装箱)

一. 静态和非静态 二. 拆箱和装箱 1 ! 作       者 : Yaopengfei(姚鹏飞) 博客地址 : http://www.cnblogs.com/yaopengfei/ 声     明1 : 本人才疏学浅,用郭德纲的话说"我是一个小学生",如有错误,欢迎讨论,请勿谩骂^_^. 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留下你的评论,加我QQ:604649488 (备注:评论的博客名) 原文地址:https://www.c