浅谈.NET中的类型和装箱、拆箱原理
- 变量赋值 值类型的变量将直接获得一个真实的数据副本,而对引用类型的赋值仅仅是吧对象的引用赋给变量,这样就可能导致多个变量引用到一个实际对象实例上(这里需要各位博友去理解.NET对String的一些优化机制,本质和这个不相悖)。
- 内存分配 引用类型的对象将在堆上分配内存,而值类型的对象则会在堆栈上分配内存。(内存如何分配:堆栈上存的是什么?值类型变量和引用类型变量的引用。堆上存的是什么?引用类型的对象(包括了类型对象指针和同步块索引,注意只是个索引,这是.NET为线程同步提出的一种折中的办法。))。大对象堆(也是堆,一种特别的堆)什么的这里不做介绍。但必须说明的是:堆栈的空间有限,但运行效率却比堆要高得多!!!
- 由于所有的值类型都继承自System.ValueType,而System.ValueType继承自System.Object,并重新实现了基类System.Object的一个虚方法Equals,而引用类型并没有重写。
- 在堆上分配一个内存空间,大小等于需要装箱的值类型对象的大小加上两个引用类型对象都拥有的成员:类型对象指针和同步块引用。
- 把堆栈上的值类型对象复制到堆上新分配的对象。
- 返回一个指向堆上新对象的引用,并且存储到堆栈上被装箱的那个值类型的对象里。
- 获取已装箱对象中各个字段的地址,这个过程就是“拆箱”
- 值类型的格式化输出
- System.Object类型的容器
using System;
namespace MaxValueTest
{
/// <summary>
/// D201
///
/// </summary>
class Program
{
static void Main(string[] args)
{
int i = Int32.MaxValue;
Console.WriteLine("Int32的最大值是"+i);//引发了一次不必要的装箱操作
Console.WriteLine("Int32的最大值是" + i.ToString());//ok Console.ReadKey();
}
}
}
浅谈.NET中的类型和装箱、拆箱原理的更多相关文章
- NET中的类型和装箱/拆箱原理
谈到装箱拆箱,DebugLZQ相信给位园子里的博友一定可以娓娓道来,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么Deb ...
- 【.Net基础二】浅谈引用类型、值类型和装箱、拆箱
目前在看CLR via C#,把总结的记下来,索性就把他写成一个系列吧. 1.[.Net基础一] 类型.对象.线程栈.托管堆运行时的相互关系 2.[.Net基础二]浅谈引用类型.值类型和装箱.拆箱 引 ...
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- java中的包装类与装箱拆箱定义
JAVA 中int类型转String类型的通常方法,有三种: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i+"" ...
- java中Integer与int装箱拆箱一点收获
示例代码: class BoxIntInteger { public static void main(String[] args) { Integer a = new Integer(10111); ...
- 浅谈 JavaScript 中 Array 类型的方法使用
前言:Array 类型是 JavaScript 中除了 Object 类型以外最常用的类型. 一.创建数组 JavaScript 中的数组与其他语言中的数组有着很大的区别.例如Java.PHP等语言中 ...
- js包装类型的装箱拆箱
https://www.jb51.net/article/155820.htm https://juejin.im/post/5cbaf130518825325050fb0a https://juej ...
- CLR via C# 中关于装箱拆箱的摘录
装箱: 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制.下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情. 1.在托管堆中分配好内存.分配的内存量是值类型的各 ...
随机推荐
- windows7 10 windows2008 windws2012 nfs客户端的安装
servermanagercmd.exe -install FS-NFS-Services for windows2008 windows2012 在添加功能角色-添加文件打印服务选择nfs客户端 ...
- <javaScript>document.body为null的问题
虽然body是JS中的DOM技术中所有浏览器支持的属性,但在我们的代码编写中,还是会碰到document.is null问题 例如:我们可以使用alert(document.body);的时候,就会提 ...
- JS pc端和移动端共同实现复制到剪贴板功能实现
JS pc端和移动端实现复制到剪贴板功能实现 在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了, ...
- IfcAxis2Placement3D IFC构件的位置和方向
IfcAxis2Placement3D定义了三维空间中物体的位置和方向,由三部分组成: The attribute Axis defines the Z direction, RefDirection ...
- 完全解读 margin 标签
你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并?margin在块元素.内联元素中的区别?什么时候该用 padding而不是margin?你知道负margin吗?你 ...
- 第十三章 RememberMe——《跟我学Shiro》
转发地址:https://www.iteye.com/blog/jinnianshilongnian-2031823 目录贴:跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功 ...
- 创建KVM虚拟机
#此操作是在VMware workstations上面做的,要在开机前 编辑虚拟机设置——>处理器--->虚拟化Intel/VT-x/ept 选项勾选上,如果是在服务器上请在bios界面设 ...
- SPSS 2019年10月31日 20:20:53今日学习总结
◆描述性统计分析 概念:描述性统计分析方法是指应用分类.制表.图形及概括性数据指标(去均值,方差等)来概括数据分布特征的方法. 而推断性统计分析方法则是通过随机抽样,应用统计方法把从样本数据得到的结论 ...
- python 优雅的解析 jsonp
一段 jsonp 格式数据 mtopjsonpweexcb1({"api":"mtop.taobao.idle.recycle.nextspunav.get", ...
- 【ARM-Linux开发】Linux查看设备驱动
驱动操作命令: insmod / modprobe 加载驱动 rmmod 卸载驱动 lsmod 查看系统中所有已经被 ...