一个小程序引发的思考

   既然是一个小程序引发的思考,那么我们就先看看这个小程序,看看他有何神奇之处:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass s = new MyClass();
            s.val = 10;
            int i = 20;
            Console.WriteLine("s.val={0},i={1}",s.val,i);
            MyMethod(s, i);
            Console.WriteLine("s.val={0},i={1}", s.val, i);
            Console.Read();
        }
        static void MyMethod(MyClass f1,int f2)
        {
            f1.val = f1.val + 5;
            f2 = f2 + 5;
        }
    }
    class MyClass
    {
        public int val = 20;
    }
}

呵呵,大家看了以后可能会感觉这不是很简单的代码吗?有什么特别的地方吗?没有,真没有!但是我想问下大家这两次输出结果会有什么不同吗?分别是什么?有没有得出两次结果都是一样的?这个程序输出的结果是:

JD20131219235756

    可能有些童鞋可能会问,不应该是一样的吗?为什么一个值变了,另外一个没有变呢?这是为什么呢?仔细的同学可能会发现static void MyMethod(MyClass f1,int f2)这个方法两个参数的类型不一样,f1属于引用类型,f2属于类型,是不是因为这个原因才导致两个变量经过同样的处理,s.val的值改变了,i的值却没有变。首先我们了解下什么是值类型,什么是引用类型。

值类型与引用类型(这个面试的时候经常会被问到)

    值类型:值类型只需要一段单独的内存,用于存储实际的数据,他存在栈里面

    引用类型:引用类型需要两段内存。

  • 第一段存储实际的数据,它总是位于堆中。
  • 第二段是一个引用指向数据在堆中的位置,它通常位于栈中。

那这样说,像上面s对象,它是一个引用类型,那它应该存放在堆中,但是val又是个值类型,那它不是应该存放在栈中吗?

    请记住,对于一个引用类型,其实例部分始终存放在堆里。既然val是对象s的一部分,那么它们都会被存放在堆里,无论它们是值类型还是引用类型。

这里顺便介绍下栈和堆

    栈:栈是一个内存数组,是一个LIFO(last-in first- out,后进先出)的数据结构,栈存储几种类型的数据。

  • 某些类型变量的值
  • 程序当前的执行环境
  • 传递给方法的参数

    栈有以下几个特征:

  • 数据只能从栈的顶端插入和删除。                                                                       
  • 把数据放到栈顶叫入栈(push)。
  • 从栈顶删除数据叫出栈(pop)

    堆:堆是一块内存区域,在堆里可以分配大块的内存用于存储某些的类型的对象。与栈不同,堆里的内存能够任意顺序存入或移除。

       虽然可以在堆里保存数据,但并不能显式地删除它们。CLR的自动GC在判断出程序的代码不会再访问某些数据时,自动清除无主的堆对象。我们因此可以不用操心这项使用其它编程语言时非常容易出错的工作了。

          在介绍了值类型、引用类型与堆和栈,那我们解析下上面程序的执行步骤:

    • 在方法被调之前,用作实参的变量s已经在栈里了。
    • 随着方法的开始,系统在栈中为形参分配空间,并从实参复制值。
    • 因为s是引用类型所以引用被复制,结果实参和形参都引用堆中的同一个对象。
    • 因为i是值类型,所以值被复制,产生了一个独立的数据项。
    • 在方法的结尾,f2和对象f1的字段都被加上5.
    • 方法执行后,形参被从栈中弹出。
    • i,值类型,它的值不受方法行为的影响。
    • s,引用类型,它的值被方法的行为改变了。

    亲爱的童鞋们,你们明白了吗?别看一点小程序,原来深挖可以得出那么多信息。其实也侧面说明了基础的重要性,童鞋们加油吧!

转载于:https://www.cnblogs.com/smiler/p/3483175.html

小程序“分解质因数”引发的思考 如何实现“分解质因数”从想法说起案例研究:分解质因数问题分析编写程序示例代码一如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 从想法说起 (本文以JAVA语言为... 阅读详情

相关推荐

外卖cps分销公众号小程序淘客项目,引发的思考(附0基础搭建源码)

关注公众号的人都可以看到我之前发的关于外卖CPS项目的一篇实操文档,也不需要付费什么的就可以很清楚的了解到这个项目的概况以及一些实操教程。(当然很多朋友在来找我问问题的时候还都给我发了红包,非常感谢) 外卖cps带分销返利源码 怎么推广“外卖CPS项目”赚佣金? 饿了么美团外卖红包小程序搭建教程 源代码地址 http://www.mybei.cn 搭建步骤 下载以上源代码到本地 http://www.mybei.cn 成品展示 截图 步骤 下载以上源代码到本地 http://www.mybei.c

m0_56783267的博客 1106

一个bug引发对小程序运行原理的思考

一个bug引发对小程序运行的一点点思考 最近遇到一个小程序的bug,问题不大很快解决,但是之后在看小程序运行原理的文章中,回想起这个bug,突然意识到这个bug出现的原因。通过简单讲讲 bug 出现的场景,引出一点点我对小程序运行的认识。 bug场景 在 onLoad 周期有一个循环计时器(setInterval),animation 是循环计时器的函数,内置一个一次性计时器(setTi...

耐得住寂寞也是一种境界 1272

微信小程序开发的学习资料收集

小程序开发学习资料集合

zhan9le的博客 1万+

由一个小程序引发对 size_type类型的思考

今天第一天看“算法导论”,看了插入排序算法。想用c++练习一下,恰好最近也在复习动态数组以及vector,想分别用动态数组和vector实现上面的功能。 首先,用动态数组实现没事,程序如下: //用动态数组实现数组元素从小到大的排序 #include using namespacestd; int main() { int i,j,key; int arr; cou

风清扬zld的博客 1014

缺陷修改实践——replace函数的运用|思考?

replace函数的运用,代码设计,bug修改,replace巧妙用法,前端遇到问题解决问题,html属性,html格式富文本的替换,富文本的转义

江拥羡橙的博客 3万+

实测对比:纳芯微NSD1624在光伏逆变器中的性能表现(含温度测试数据)

本文详细评测了纳芯微NSD1624非隔离驱动芯片在光伏逆变器中的性能表现,包括动态效率、高温稳定性及抗干扰能力。实测数据显示,该芯片在800V母线电压下效率峰值达99.03%,高温环境下结温稳定在102.7℃,且传播延迟一致性优异。与竞品相比,NSD1624在总损耗和热阻方面具有显著优势,是光伏逆变器驱动方案的理想选择。

weixin_29297127的博客 363

由一个小程序引发的思考 — 关于字段和方法的分派

面向对象三大特征封装、继承和多态,此处我们一般都知道方法的多态性,覆盖和重载。但是字段呢?当然根据定义,跟字段无关,也就是不能覆盖?先看一个小程序: package com.yymt.jvm.method.dispatch; public class DispatchTest { public static void main(String[] args) { Base b =...

田麦 183

GoDaddy域名解析 到 阿里云域名DNS

一:登录GODaddy,点击“个人中心”,然后点击“管理域名” 二:域名解析 第一种:直接解析到对应的服务器 添加一个,类型默认A,主机填写二级域名前缀(image.主域名),指向填写目标服务器ip即可(注意目标服务器80端口是否开放) 第二种:将主域名dns转到阿里云域名下 三:若要修给为阿里云解析服务器,要做以下修改,点击“更改” 点击更改后出现如下页面,此时需要到阿里云官网云解析DNS下添加域名解析 四:阿里云添加域名解析...

xiaolinzi176的博客 6702

抖音死亡计算机在线测,抖音死亡计算器怎么玩?抖音死亡计算器测试入口

最近抖音上很多人都在玩一个死亡计算器的测试,只需要回答20到题目,我们可以计算出自己的寿命,以及剩下日子还能干多少事情。抖音死亡计算器怎么玩呢?想试一试的可以看看下文。抖音死亡计算器怎么玩首先在抖音首页搜索栏搜索“死亡计算器”、“珍惜时间”或者“年龄计算器”等等关键词,你就能看到相应的小程序,然后点击小程序就能进行测试了!进入小程序之后,需要回答20道关于自身的问题,升高、体重、血型、星座、出生年...

weixin_31164189的博客 381

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

死亡计算机在线使用,抖音死亡计算器珍惜时间测试入口 抖音珍惜时间死亡计算器在线测试...

现在抖音上有一款趣味倒计时软件非常的火爆,就是抖音珍惜时间死亡计算器,让大家可以知道时间的宝贵,一寸光阴一寸金。可以根据你的出生年月日,推算出你的死亡时间。很有意思哦,想测试的可以来试试!抖音珍惜时间死亡计算器介绍抖音生命计算器在线测试是一款趣味倒计时软件,符合年轻人时尚潮流的心理,可以让大家知识时间的宝贵,一寸光阴一寸金;系统能的数据分析,提示大家要珍惜时间,每分每秒都要用得有价值;不仅可以娱乐...

weixin_34718952的博客 415

YOLO26涨点改进 | 独家创新,特征融合改进篇 | TGRS 2025 | 引入FFM特征融合模块,实现特征的全局交互与融合,含多种组合创新改进,适合小目标检测、助力YOLO26有效涨点

本文提出了一种改进YOLO26目标检测模型的FFM模块,该模块通过跨模态注意力机制实现全局特征融合,显著提升模型对小目标、密集目标和复杂场景的检测性能。FFM采用多头跨注意力机制建模不同模态间的复杂关系,同时引入可调节下采样率降低计算复杂度。实验表明,在WHU-OPT-SAR等数据集上,FFM模块使mIoU提升0.75%,OA提升0.32%。文章详细介绍了FFM的结构原理、核心代码实现,并提供了两种改进YOLO26的yaml配置文件方案,包括FFM单独使用以及与FCM模块的组合方案。

Ai缝合怪、助力小伙伴高效发论文 190

【技术思考】一个由Token引发的APP盈利思考

今天看到一篇关于Token的技术文章,大致内容就是随着APP小程序的泛滥,人们对于密码的安全保密也要求越来越高,已没有谁去傻傻的去注册一个甚至没有认证过的小程序。而小程序为了生存,提出了使用Token授权的概念 一、Token授权 何谓Token授权?即考虑到用户对于小程序安全性的忧虑,提出有第三方(如支付宝、微信、网易)授权方式免登录。比如一个“信用卡管家“的小程序,希望访问用户网易邮箱中关...

暮雨亦成詩 461

YOLOv11改进策略【SPPF】| 将特征金字塔池化修改为:SPPCSPC,提升模型的特征提取能力和计算效率。

本文记录的是。YOLOv7中的SPPCSPC(Spatial Pyramid Pooling Cross Stage Partial Connections)模块是一种结合了(SPP)和(CSP)的改进结构,本文将其添加到YOLOv11中,

Limiiiing的博客 1820

【RTD】AD7793两线式铂电阻PT100/PT1000应用

两线式RTD是低成本的检测方案,适用于检测精度不高、导线长度较短的场合。

只要思想不滑坡,想法总比问题多。 4258

一行 Object.keys() 引发的思考

关注公众号前端开发博客,领27本电子书回复加群,自助秒进前端群故事背景有一天上线后大佬反馈了一个问题,他刚发的动态在生成分享卡片的时候,卡片底部的小程序码丢失了,然而其他小伙伴都表示在自己手机上运行正常。事实上大佬也说除了这条动态以外,其它都是正常的。说明这个 BUG 需要特定的动态卡片 + 特定的设备才能复现,所幸坐我对面的小姐姐手机与大佬是同款,也能复现 BUG,避...

前端开发博客 3540

【数字孪生与仿真技术】14:数据驱动+机理模型:工业级混合建模实战(附MATLAB完整代码+案例解析)

摘要 本文针对工业建模中机理模型精度不足和数据驱动模型缺乏物理约束的痛点,提出混合建模技术作为解决方案。文章系统阐述了混合建模的3种主流架构(参数校正型、残差补偿型、组件替换型),结合清华大学催化裂化装置的实际案例,分析混合建模的工业应用价值。同时以连续搅拌反应釜(CSTR)为例,提供MATLAB环境下残差补偿型混合模型的完整实现代码,详细展示从机理模型构建到数据驱动补偿的全流程,并给出工程实践中的应对策略,为工业建模提供可落地的技术方案。 关键词 混合建模、机理模型、数据驱动、工业建模、MATLAB

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 622

变量初始化而引发的思考

变量初始化而引发的思考     今天(5-26)在写一个小程序《更该文件修改时间》,期间用到了SYSTEMTIME这个结构体,然后通过SystemTimeToFileTime和SetFileTime去实现,很简单。程序编译链接都很正常,但是就是没有把时间修改过来,也没有任何提示,以为是对SYSTEMTIME赋值出现问题,于是用GetSystemTime获取系统时间进行更改尝试,没有问题,那问题出

zyw_anquan的专栏 1285

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

由近期设计的心理测试小程序所引发的关于产品设计的思考

随着互联网的发展,工种变得越来越多,职责划分也越来越细,面向产品方向的也不只有产品经理了,还有用户体验、产品设计等等。 在作为小程序开发者,在设计与开发制作了不同行业和主题的小程序的过程中,我产生了一些关于产品设计的思考。其中最具代表性的是: 什么是产品设计? 什么是产品设计流程? 作为一个小程序创作者我需要有什么技能? 碰巧最近,我又设计与制作了一款小而美的心理测试小程序。于是,我把当时的内容整理到了这一篇文章里了,希望可以帮助到更多的人。 产品设计的定义 产品设...

mon_star°的博客 446

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一条道简单的算法引发的思考

新一季的 Rick&Morty 已经上线,剧集质量虽然有所下降,但 E03 中的 SheepCounter 挺有意思。自己照着剧中的设定开发了一款界面极其相似、交互更为丰富的小程序,小程序的终极目标只有一个:数羊!数羊!!数羊!!!。不会真有人觉得这款小程序会起到催眠作用吧。小程序虽然简单,但也探索出了一些有意思的小实现。可以看到,在我们小程序的数羊界面中已经有了自定义实现了键盘。在小程序中进行输入时,我们肯定不希望弹起系统键盘。输入框最有辨识度的特点是什么?那自然是闪烁的光标。

军火库 376

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

微信小程序为教育行业带来哪些新思考?

随着微信小程序各项功能的不断更新以及开放,让更多的商家看到了小程序的发展空间。而对于教育这个行业来说,运营一个属于自己的公众号是必须的,但毕竟公众号的局限性只是更多的提供教育资讯,而到如今,教育培训市场火爆,无论是大人还是小孩等各种群体的需求,都会为培训市场构成一个庞大的市场局面。而这种局面,自然而然也会引发出各类问题,如:教育机构学员多,难以管理,流失率高;教育课程不统一,难以形成体系的学习方案

wukaiyun2的博客 1500

一个“u”引发的思考

最近在学习API函数编写,可是毕竟自己基础不扎实。当出现问题时候,解决起来需要一段时间,一开始编写一个实现复制自身程序到Windows目录,system32目录功能的小程序。应用的API函数不多,主要有GetModuleFileName(),GetWindowsDirectory(),GetSystemDirectory,CopyFile();这四个API函数。下面是...

weixin_33949359的博客 108
上一篇: 在C#使用文件监控对象FileSystemWatcher 实现数据同步
下一篇: 使用Visual Studio 2010打造C语言编译器
dddp75921
博客等级 码龄12年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值