C#中string用法实例详解
作者:shichen2014 发布时间:2022-06-11 03:22:17
在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#中string的用法。具体如下:
1.string是一个引用类型,平时我们比较string对象,比较的是对象的值而不是对象本身
如下面代码所示:
string strA="abcde";
string strB="abc";
string strC="de";
Console.WriteLine(strA == (strB+strC));//true
Console.WriteLine((object)strA == (object)(strB+strC));//false
因为字符串内容相同但引用的不是同一个实例
2.string对象是不可修改的
如下代码所示:
string strA="abcde";
strA="aaaaa";
从表面上看似修改了strA的内容,事实上"abcde"没有被修改,而是从新创建了一个对象"aaaaa",然后把该对象的引用赋给strA,最后"abcde"会被作为垃圾回收。
3.string的创建
直接赋值:
string strA="abcde";//创建一个内容为abcde的string对象,然后将该对象的引用赋给strA
构造:
char[] arr={'a','b','c','d','e'};
string strA=new string(arr);//这里只列举一种
注意:没有String str=new String("abcde");这样的构造,string 是 .NET Framework 中String的别名。
4.string参数传递
string是引用类型,我们试图在一个函数里改变这个值
测试代码如下:
static void Main(string[] args)
{
string strA = "abcde";
Deal(strA);
Console.WriteLine(strA);
Console.ReadLine();
}
static void Deal(string str)
{
str = str.Substring(0, 2);
}
运行结果:abcde
原因是通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但无法更改引用本身的值,通过ref关键字传递参数可解决该问题。
修正后的代码如下:
static void Main(string[] args)
{
string strA = "abcde";
Deal(strA);
Console.WriteLine(ref strA);
Console.ReadLine();
}
static void Deal(ref string str)
{
str = str.Substring(0, 2);
}
结果:ab
此时传递的是引用本身,而不是副本
5.null 字符串和空字符串
null 字符串:没有分配内存;空字符串分配了内存,但内存里面没有数据.
测试代码如下:
static void Main(string[] args)
{
string strA = "1";
string strB = string.Empty;
string strC = null;
Console.WriteLine(int.Parse(strA));//正确
Console.WriteLine(int.Parse(strB));//输入字符串的格式不正确
Console.WriteLine(strC.ToString());//未将对象引用设置到对象的实例。
Console.ReadLine();
}
内置方法字符串是否为 null 或为空:
IsNullOrEmpty等同于 if (str == null || str.Equals(String.Empty))
IsNullOrWhiteSpace等同于 if (str == null || str.Equals(String.Empty) || str.Trim().Equals(String.Empty))
6.StringBuilder
现看如下测试代码:
string strA="abc"
for(int i=0;i<10000;i++)
{
strA+="abc";
}
Consolse.WriteLine(strA);
尽管该代码会出现以使用字符串串联来将新的字符追加到命名为 strA 的现有字符串,它实际上会为每个串联操作创建新的 String 对象。大大的降低了性能。可使用 StringBuilder 类代替String 类多次更改字符串值,StringBuilder 对象是可变的,当进行追加或删除字符串中的子字符串时,不会创建新的对象,而是在原来的对象上进行修改。 完成 StringBuilder 对象的值的修改后,可以调用其 StringBuilder.ToString 方法将其转换为字符串
修改后的测试代码如下:
StringBuilder strA=new StringBuilder();
for(int i=0;i<10000;i++)
{
strA.Append("abc");
}
Consolse.WriteLine(strA.ToString());
相信本文所述实例对于大家牢固掌握C#的string用法能起到一定的帮助和借鉴作用。


猜你喜欢
- 初学Android编程,Android SDK中提供的Sample代码自然是最好的学习材料。 
- Spring的最基本的能力就是DI,即依赖注入,或控制反转,它可以为Bean注入其依赖的其他Bean。一个Bean依赖其他Bean一般是通过
- Spring的注解@Qualifier小结近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~先说明下场景,代
- 单例有多种的写法,本例是懒汉式单例的一种写法。在高并发环境下需要注意的是:1.单例在并发访问并调用其相应的getInstance方法的时候也
- 前言接触Android Stuidio有一阵子了,之前用的时候有很多小问题,不过现在的版本感觉已经很好用了,所以准备彻底从Eclipse转战
- 1.灰度线性变换图像的灰度线性变换是图像灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的。灰度映射通
- 扫雷游戏,大家都应该玩过吧!其实规则也很简单,可是我们想自己实现一个扫雷,我们应该怎么做呢?Step1: 知晓游戏原理扫雷就是要把所有非地雷
- 前提:windows上安装jdk1.启动jar脚本@echo offSTART "app" javaw -jar app
- 傅里叶变换将图像分解成其正弦和余弦分量,它将图像由空域转换为时域。任何函数都可以近似的表示为无数正弦和余弦函数的和,傅里叶变换就是实现这一步
- yaml介绍YAML(YAML Ain't Markup Language),一种数据序列化格式优点:容易阅读容易与脚本语言交互以数
- 在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,
- 从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/arti
- 本文实例为大家分享了UnityShader实现运动模糊的具体代码,供大家参考,具体内容如下1.此代码挂在摄像机上,使摄像机运动起来using
- 简介:本文已一个简要的代码示例介绍ThreadLocal类的基本使用方式,在此基础上结合图片阐述它的内部工作原理。早在JDK1.2的版本中就
- 本文实例讲述了C#实现输入10个数存入到数组中并求max和min及平均数的方法。分享给大家供大家参考,具体如下:using System;u
- 首先从表现层介绍,后续后深入原理。1、先简单介绍maven如何生成jar文件方便测试<plugin>
- 布局:<?xml version="1.0" encoding="utf-8"?><
- 原理很简单,利用Path画一个图,然后用动画进行播放,播放时间由依赖属性输入赋值与控件内部维护的一个计时器进行控制。控件基本是玩具,无法作为
- 详解Java虚拟机管理的内存运行时数据区域概述 Java虚拟机在执行Java程序的过程中会把它所管理的内
- 本文实例为大家分享了Java网络编程TCP程序设计的具体代码,供大家参考,具体内容如下[1] TCP编程的主要步骤客户端(client):1