浅谈.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.在托管堆中分配好内存.分配的内存量是值类型的各 ...
随机推荐
- python pip settools 安装基于源码 gdal安装需要c++相关库
- openstack 基镜像展开过程
- <IDE>vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
vscode是微软开发的的一款代码编辑器,就如官网上说的一样,vscode重新定义(redefined)了代码编辑器.当前市面上常用的轻型代码编辑器主要是:sublime,notepad++,edit ...
- Ionic4.x Modal模态对话框以及 Modal 传值
1.Modal 模态对话框简介 官方文档:https://ionicframework.com/docs/api/modal Modal模态对话框主要用于登录注册页面,我们可以把它理解为从页面底部弹出 ...
- PCA与LDA
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_05-Feign远程调用-客户端负载均衡介绍
2 Feign远程调用 在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用的技术. 下图是 ...
- python基础之面向对象(二)
一点提醒 首先在使用pickle读取load时,需要先把使用到的类import上,否则会报错.在pycharm中使用时不会报错,但在linux或者cmd时就会报错!必须import. 报错提示: Fi ...
- POPUP_GET_VALUES 金额字段不可编辑
转自:https://blog.csdn.net/huanglin6/article/details/102733845 当在POPUP_GET_VALUES函数中参考的字段是个货币或者金额字段的话, ...
- sql 获取本周周一和周日
版本1.0(获取周日存在问题,请勿使用,仅用于引以为戒) 存在问题,获取周日的时候,当当前时间正好是周日,会获取下一周的周日,而非本周周日. ,)),) ),, ,)),) 版本2.0 看到版本1.0 ...
- Linux hostname介绍
以下操作均时基于 Centos 6.8 操作. 一.现象 在平时工作中,当需要修改主机名时,我们一般会这样操作: 第一步,通过 hostname 命令临时修改主机名. hostname kwang-t ...