封箱和拆箱

封箱的含义:把值类型转换为System.Object类型,或者转换为由值类型实现的结构类型.

如:struct MyStruct

{

pubilc int Val;

}

MyStruct valType1 = new MyStruct();

valType1.Val = 5;

object refType = valType1; //把值类型的结构放入object类型的变量中,以封箱它.

拆箱的含义:是和封箱做相反的操作.

如:valType.Val = 6; //对原值类型进行赋值

MyStruct valType2 = (MyStruct)refType; //拆箱到新变量中

Console.WriteLine("valType2.Val = {0}",valType2.Val);

封箱的作用:允许在项目类型是object的集合(例:ArrayList)中使用值类型,一个内部机制允许在值类型上调用object,例如int和结构.

注意:封箱值变量而创建的对象,只包含值类型变量的一个副本的引用,而不包含原值类型变量的引用,封箱是隐式转换,拆箱是显式转换,在访问值类型内容前,必须进行拆箱.

时间: 2024-11-03 21:52:48

封箱和拆箱的相关文章

自动封箱和拆箱

Integer 中 public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 如果没有设置IntegerCache.high的值,

java的封箱和拆箱

一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10); 而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Inte

【细说Java】Java封箱拆箱的一些问题

1.概念 首先简单介绍一下概念性的东西: 所谓封箱:就是把基本类型封装成其所对应的包装类型: 而拆箱则恰好相反,是把包装类型转换成其所对应的基本数据类型. 如基本类型int,封箱后的包装类是Integer. 2.包装类的缓存值,equals与== 相信,大家对equals与==一定很熟悉了吧,同样,包装类也重写了equals方法,只要两个包装类对象所包装的基本类型数据是相等的,那么,则认为两个包装类对象是相等的: 然后,看一段简单的程序,并预测以下它的打印结果: public class Tes

C# 装箱和拆箱的简单理解

一.装箱拆箱的意义 主要用途是可以向ArrayList中添加值类型的元素 二.理解 装箱的含义:理解为可以将子类对象隐式的转化为父类对象(保留自己特有的成员,和子类重写的成员) 装箱:例子为典型的装箱过程,因为int为object的子类,故int 的对象可以隐式的转化为object的对象 int i=1; object obj=i; 拆箱:需要显式的转化为值类型,但是必须是装箱过程中的类型,否则会拆箱失败,即装箱时是什么类型,拆箱就是什么类型. (int)obj; 三.is方法 主要用于检测op

C#装箱和拆箱(值类型和引用类型之间的转换)

面向对象编程中,封箱指把非对象类型的数值或数据,包装成对象类型反之,拆箱指把对象类型拆成非对象的数值或数据. 例子:定义一个Circle 类 1 class Circle 2 { 3 double radius; 4 public Circle(double param) 5 { 6 radius = param; 7 } 8 9 public double Area() 10 { 11 return Math.PI * radius * radius;//圆的面积 12 } 13 } 1 st

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

自动装箱/自动拆箱/注释之反编译示例

下面是源码: 1 package test; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Test { 7 public static void main(String[] args) { 8 List<Integer> list = new ArrayList<>(); 9 //下面会触发编译器自动装箱 10 list.add(1); 11 //下面会触发编译器自动拆箱 12

装箱与拆箱

一.装箱机制: 1,在托管堆中分配内存.分配的内存量是值类型各字段所需的内存量,还要加上托管堆中所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量2,值类型字段复制到新分配的堆内存3,返回对象地址.现在该地址是对象的引用:值类型成了引用类型 二.拆箱机制 1,获取已装箱值类型对象中的各个字段的地址(这个过程是装箱)2,将字段包含的值从堆复制到基于栈的值类型字段实例中3,如果包含"对已装箱值类型实例的引用"的变量为null,抛出NullReferenceException

Java自动装箱拆箱

一.装箱.拆箱定义 如果一个int型量被传递到需要一个Integer对象的地方,那么,编译器将在幕后插入一个对Integer构造方法的调用,这就叫做自动装箱.而如果一个Integer对象被放到需要int型量的地方,则编译器将幕后插入一个队intValue方法的调用,这就叫做自动拆箱. public static void main(String[] args) { // 装箱 Integer i1 = Integer.valueOf(1); // 自动装箱 Integer i2 = 1;// 默