C#字符串的恒定性

 1 string str1="aa";
 2
 3 string str2="aa";
 4
 5
 6 str1,str2,变量所指向的堆空间的地址是一样的。栈空间的内容是不一样的。
 7
 8
 9
10  //new的作用
11     * 1.开辟合适大小的堆空间或者常量区空间
12     * 2.创建对象
13     * 3.调用构造函数
14     * 4 返回开辟的空间地址
15 string str3 = new string(new char[]{‘a‘,‘a‘});
16
17 string str4 = new string(new char[]{‘a‘,‘a‘});
18
19
20 str3,str4,栈空间的地址和堆空间的地址都是不一样的。
总结:1.创建一个字符串,系统会先扫描常量区(堆空间),有没有相同值的字符串,如果有,就直接返回对应的常量区(堆空间)地址。     2.如果对字符串进行修改。。。但是无法对字符串进行修改,系统会先扫描常量区有没有修改之后的值,如果有,就直接返回,如果没有,就开辟新的空间返回。
时间: 2024-10-06 17:51:55

C#字符串的恒定性的相关文章

C#forUnity快速入门(连载12)-C#的字符串

C# for Unity编程语言快速入门教程(连载12)_C#的字符串 "C#字符串"是一个重要的知识点,对于C#初学者来说有很多重要知识点需要进行学习,总体归纳有三个大的方面: 知识点一:  字符串的常用方法与属性 属性:     Length:           得到字符串的长度   方法:    IsNullOrEmpty()   表示空字符串: IndexOf()  :           查找指定字符(子字符串). SubString():          字符串截取(得

字符串的本质

观察情况一(字符串实例直接赋值给string类型的变量): 分析: 通过调试看出,两个变量存储的内存地址是一样的,这个内存地址其实指向的是字符串常量区 图解: 原理: 创建一个字符串对象,系统会先扫描常量区有没有相同值的字符串,如果有,就直接返回常量区对应的地址 . 观察情况二(通过 new 关键字实例化string类型的对象): 分析: 此时为什么使用new关键字创建字符串实例,怎么内存地址没有像情况一中内存地址都一样.原因是new关键字的本质促使. new的作用: 1.开辟堆内存空间或者常量

C语言之总结13

23). 内存中的五大区域 a. 栈 是专门用来存储局部变量的.所有的局部变量都是声明在栈区域中的. b. 堆 允许程序员手动的从堆申请空间来使用.(对象) c. BSS段 是用来存储未初始化的全局变量和静态变量. d. 数据段/常量区 用来存储已经初始化的全局变量.静态变量.还有常量数据. e. 代码段 用来存储程序的代码/指令. 24). 存储字符串数据的两种方式的区别 1). 当他们都是局部变量的时候. char name1[] = "jack";//name1存在栈区,&quo

DotNET知识点总结三(笔记整合)

使用接口的注意事项: 接口中的成员不能加访问修饰符 接口中的成员不能有任何实现 实现接口的子类必须实现接口的全部成员 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么在语法上A必须写在IA的前面,因为类是单继承的,而而接口可以多实现 显式实现接口和隐式实现接口时需要注意的问题(我们通常是隐式实现的) 类实现接口,可以显式实现接口里的方法,但是注意:一旦使用显式实现接口里的方法,那么该方法只能被接口变量调用 IFlyable fly = new Bird

C#中String StringBuilder StringBuffer

String和StringBuilder和StringBuffer,这三个都是值得深究一翻的,可能很多人会说,实在不行的话,都全部用StringBuilder,啥事没有,我不能说你的想法事不正确的,但是我可以给出更好的建议.下面简单介绍一下这三个类.  String类 在我们平时的使用当中很容易不注意到的是,自己写的代码很容易发生了装箱的操作(把值类型转换为引用类型).就比如很常见的,一个字符串拼接 string str=9+"test"; 通过查看IL代码可以知道这里发生了装箱的操作

Asp.Net 初级 高级 学习笔记

本文并非作者原创,但是作者发表! 不知道十年后,会用多少人收益我的文章,哈哈! 各位,来加个关注![注*]改文章总结了ASP.Net从入门到高级的知识! 朱磊:2012 - 0212 -------------- [朱磊是本文的原创大神,据说当年在黑马刚毕业,月薪税前1W]-------------01.Main函数是什么?在程序中使用Main函数有什么需要注意的地方?02.CLR是什么?程序集是什么?当运行一个程序集的时候,CLR做了什么事情?03.值类型的默认值是什么?(情况一:字段或全局静

基础加强

Main函数是什么? 在程序中使用Main函数有什么需要注意的地方? CLR是什么? 程序集是什么? 当运行一个程序集的时候,CLR做了什么事情? 值类型的默认值是什么? 声明一个变量时在内存中做了什么事情? 初始化一个变量的时候又在内存中做了什么事情? new关键字做的事情? 数组一旦创建后,能不能修改数组的长度? 如何声明一个多维数组? 如何获取多维数组的总长度? 如何声明一个交错数组? 交错数组的本质是什么? 为什么要有方法? 如何实现方法的重载? 引用参数(ref)和输出参数(out)的

.net基础の心得一

托管代码 和非托管代码 在业务方面 托管代码要比非托管代码的速度要快  在程序第一次运行的时候 托管代码 会经过csc编译器  还有CLR 转换成本地平台的二进制指令  那么之后就会变非托管代码的运行的速度要快   但是一段程序关闭 或关机   在其运行的时候那么又需要转换成本地平台的二进制指令 .net平台的简答的编译原理 我们写好的程序 在编译的时候 会经过csc编译器编译成为微软的中间语言储存在程序集中  然后再经过CLR中的JIT及时编译器 转化成本地CPU的二进制指令   然后运行 什

JavaScript大杂烩8 - 理解文本解析的"黄金搭档"

文本解析"黄金搭档" - String与RegExp对象 文本解析是任何语言中最常用的功能,JavaScript中也是一样,而正则表达式作为最常用的方式,JavaScript也同样是支持的,下面就来看看字符串对象与正则表达式对象的配合. 字符串的恒定性 在正式开始讨论字符串对象的成员之前,我们需要了解一点,那就是:与C#一样,JavaScript 的字符串是不可变的(immutable),String对象定义的方法都不会改变字符串的内容.像toUpperCase这样的方法,返回的是全新