C# 装箱与拆箱转换
一、装箱转换(boxing)
装箱时一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型类型对象并返回对象引用,简单来说就是将值类型转换为引用类型
任何值类型ValueType都可以被隐式转换成object类型、System.ValueType或Interface(如果值类型实现了Interface)
int i = ;
object obj = i;
装箱的过程中,首先在内存中创建 int 类型对象,然后将 i 的值复制到这个对象,最后将 int 对象的引用返回给 obj
装箱只是创建副本,在装箱产生之后,该值有原始值类型和引用类型两份副本,彼此相互独立,下面代码可以展示这一特征
using System; namespace 装箱
{
class Program
{
static void Main(string[] args)
{
int i = ;
object obj = i;
Console.WriteLine("i = {0}, obj = {1}", i, obj); //对i和obj进行不同的赋值
i = ;
obj = ;
Console.WriteLine("i = {0}, obj = {1}", i, obj);
Console.ReadLine();
}
}
}
结果:
二、拆箱转换(unboxing)
拆箱转换时显式转换,是将object类型或Interface类型转换为值类型的过程,拆箱时系统会检测要拆箱的实例,确保他是给定值类型的装箱值后,再把其值赋值到变量
int i = ;
//对i进行装箱
object obj = i;
//对obj进行拆箱
int j = (int) obj;
尝试将一个值拆箱为非原始类型时会抛出InvalidCastException异常,因此拆箱时的值类型因和装箱时的值类型一致
C# 装箱与拆箱转换的更多相关文章
- Java基础(35):装箱与拆箱---Java 中基本类型和包装类之间的转换(Wrapper类)
基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了. 那什么是装箱 ...
- 对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象
包的声明与定义 需要注意的是,包的声明只能位于Java源文件的第一行. 在实际程序开发过程中,定义的类都是含有包名的: 如果没有显式地声明package语句,创建的类则处于默认包下: 在实际开发中 ...
- Java暗箱操作之自动装箱与拆箱
我以前在写Android项目的时候,估计写得最多最熟练的几句话就是: List<Integer> list = new ArrayList<Integer>(); list.a ...
- 转 C# 装箱和拆箱[整理]
1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...
- 《Java中的自动装箱和拆箱功能.》
//Java中的自动装箱和拆箱功能. class AutoboxingUnboxing { public static void main(String[] args) { //直接把一个基本类型变量 ...
- C# 装箱与拆箱
知识点 值类型. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null. 值类型超出作用范围系统自动释放内存. 主要由两类组成:结构,枚举(enum),结构分为以下几类: ...
- c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]
1.命名规范 类 :名词 每个单词的首字母大写 Dog Student PersonClass 字段:首个字母小写,如果有多个单词,后面的单词首字母大写 string name=" ...
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...
- 有关c#装箱和拆箱知识整理
c#装箱和拆箱知识,装箱和拆箱是一个抽象的概念. 1.装箱和拆箱是一个抽象的概念 2.装箱是将值类型转换为引用类型 : 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与O ...
随机推荐
- django创建分页
前台html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- [LISP] LISP Collections
lispbox: https://common-lisp.net/project/lispbox/ SBCL: http://sbcl.org/ <Common Lisp in practica ...
- Windows 7 系统中开启 ASP.NET State Service 服务的方法
控制面板 -> 程序和功能 -> “打开或者关闭 Windows 功能”对话框 -> Internet 信息服务 -> 万维网服务 -> 应用程序开发功能 -> A ...
- gitlab 部署
Gitlab 安装 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能, ...
- git 下载指定tag版本的源码
git clone --branch x.x.x https://xxx.xxx.com/xxx/xxx.git
- 微信小程序如何跳转到另一个小程序
微信小程序如何跳转到另一个小程序,要注意:在app.json文件里也要配置 navigateToMiniProgramAppIdList,如下图: "navigateToMiniProgra ...
- “全栈2019”Java多线程第三十六章:如何设置线程的等待截止时间
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 下一章 "全栈2019"J ...
- 04_python_列表
一.列表 列表是用[ ]括起来并每个元素用逗号分割的,并且可以存放各种数据类型,存放的数据量非常大,列表是有序的(按照你保存的顺序),有索引, 可以切片方便取值. lst = [1, '哈哈', &q ...
- Java 泛型通配符
package com.waston; import java.util.*; public class Main { public static void main(String[] args) { ...
- 修改windows远程默认端口
修改windows远程默认端口 windows端口修改rdp 1 远程服务器运行窗口调出注册表编辑器 注册表编辑器regeidt 2 修改两个注册表 1,在注册表HKEY_LOCAL_MACHINE\ ...