网站导航
:
网学
原创论文
原创专题
网站设计
最新系统
原创论文
论文降重
发表论文
论文发表
UI设计定制
论文答辩PPT格式排版
期刊发表
论文专题
最新论文
推荐专题
热门论文
论文专题
网站首页
论文模板
设计资源
程序设计
编程文档
营销学习
设计下载
参考使用
网学资源
网络学习
学习知识
交易代码
关于网学
安全工程
自动化
保险
表演
财务管理
参考选题
论文选题-查重参考论文
参考论文大全
电气工程及其自动化
电子论文
电子信息工程
电子商务
法律
法学
工程管理
公共关系学
公共事业管理
公路工程
公路交通运输
工商管理
广告学
国际经济与贸易
汉语国际教育
汉语言文学
环境科学与工程
化学
会计学
护理学
交通运输
教育管理
教育研究生
经济学
金融
计算机科学与技术
计算机应用
酒店管理
机械电子工程
机械论文
机械设计制造及其自动化
论文查重
旅游管理
python开发
生物工程
环境工程
数字媒体技术
ios开发
工程造价
家庭教育
农学
家政学
原创检测通过
期刊发表方法
当前位置:
网学
>
设计资源
>
.Net编程
> 正文
对string类型和stringBuilder类型的研究
论文降重修改服务、格式排版等
获取论文
论文降重及排版
论文发表
相关服务
using
System;
using System.Collections.Generic;
using System.Text;
namespace TestString
{
class Program
{
static void Main(string args)
{
//在一次群组讨论中,谈到了string的类型问题,虽然它是引用类型,却具有很多值类型的特点,关于这个问题,做了如下研究:
//由于程序中可能存在大量的相同字符串,为了节省内存,C#应该是将下面两个变量都引用存放在同一个托管堆的“test”!
string myString1 = "test";
string myString2 = myString1;
//那么按照引用的理论,修改其中的一个字符串,另一个就应该跟着改变,例如做如下修改
myString2 = "New test";
Console.WriteLine(myString1);
//此时按理说myString1应该也变成"New test",但事实上经过测试,myString1 还是 "test",这是为什么呢?
//我分析,微软应该是在string类型中引入了copy-on-write技术,就是说,我们在修改string类型变量的时候,
//其实是重新开辟了一块内存,将修改后的内容放进去,
//再利用“=”把修改后的数据所在托管堆的地址传给被修改的字符串变量,来达到修改字符串变量的目的!
//下面的测试很好的说明了这个问题
myString1.Replace("t","a");
Console.WriteLine(myString1);
//myString1.Replace("t","a");方法是把该字符串中的字母t换成字母a,但是经过测试myString1的内容依然是"test",
//这就是因为虽然开辟了新空间并且将修改后的值存了进去,
//但是没有用“=”将新数据所在的托管堆的地址传给myString1,所以myString1的值没变!
//与string类型相对应,StringBuilder类型则有所不同
StringBuilder mySb1 = new StringBuilder("test");
StringBuilder mySb2 = new StringBuilder("test");
//StringBuilder类型在引用存放数据的托管堆之前加入了一个中间堆,也就是说,mySb1指向它的中间托管堆,
//假设这个中间托管堆叫stack1,然后stack1再指向存放“test”的托管堆,
//mySb2也指向它的中间托管堆stack2,然后stack2也指向存放“test”的那个托管堆,当mySb2被修改时,
//依然是采用copy-on-write技术,但是开辟新的栈并且把修改后的数据放进去后,
//会自动修改stack2让他重新指向新的数据托管堆,而mySb2一直还是指向中间托管堆stack2,
//这样就实现了直接的修改,而不用使用“=”来传递新地址给mySb2,看下面的测试:
mySb2.Replace("t","a");
Console.WriteLine(mySb2);
//果然,mySb2被成功修改了!
//Ps:以上代码虽然有些警告,但是可以运行,主要是专注于说明问题,忽略了一些细节,比如赋值了的变量未使用等问题,望见谅!
}
}
}
上一篇资讯:
使用HttpHandler解析并在网页中展示PDF文档内容
下一篇资讯:
asp.net控件开发基础示例(3)-自定义控件事件处理
相关资讯
相关文章
asp.net控件开发基础示例(3)-自定义控件事件处理
把图片保存到数据库的实现
C#实现超酷的图像效果(附源码)
C#中的泛型
c#字符串操作方法实例
相关专题
WinForm窗体之间交互的一些方法
VS中创建自定义SQLRule
三种方法在Infopath中实现数据有效性验证
如何使用和开发自定义配置节
C#获得当前文件夹内所有文件的名称,大小,类型,属
网学推荐
·
原创论文的写法
·
论文数据图表制作
·
论文排版通过检测检测
·
提供系统开发和运行服务
·
提供原创参考资料
·
档案托管服务
·
原创参考论文导航
·
查重服务维普检测低于30%
·
我们提供原创参考论文和原创的参
·
原创的论文资料参考节省时间!
·
论文格式排版 格式核对!
·
UI设计定制、界面设计
·
程序和网站等UI设计定制!
·
原创参考论文参考定制!
·
职称和论文发表,可联系业务我们
·
本科毕业设计(论文)答辩指南
·
程序制作专家
原创论文
·
财务管理
·
参考选题
·
论文选题-查重参考论文
·
参考论文大全
·
电气工程及其自动化
·
电子论文
·
电子信息工程
·
电子商务
·
工程管理
·
公共关系学
·
公共事业管理
·
公路工程
·
公路交通运输
·
工商管理
·
广告学
·
家政学
文章排行榜
·
自然框架的源代码、Demo、数据库、
·
WebService身份验证
·
不要迷失在技术的海洋中
·
.net完美操作cookies
·
取出文本中的图片地址
·
谷歌眼中的搜索未来
·
GridView显示隐藏某一列
·
谈谈关于MVP模式中V-P交互问题【附
·
ASP.NET网站预编译概述
·
详解.net内存管理
·
json教程之C#开发json解析类
·
用FCKEditor编辑器上传图片、FLASH
·
C#调用WebService时的身份验证
·
WinForm窗体之间交互的一些方法
·
VS中创建自定义SQLRule
·
三种方法在Infopath中实现数据有效
·
如何使用和开发自定义配置节
·
C#获得当前文件夹内所有文件的名称
设为首页
|
加入收藏
|
网学首页
|
原创论文
|
计算机原创
版权所有 网学网 [
Myeducs.cn
] 您电脑的分辨率是
像素
Copyright 2008-2020
myeducs.Cn
www.myeducs.Cn
All Rights Reserved
湘ICP备09003080号
常年法律顾问:王律师