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用法能起到一定的帮助和借鉴作用。

标签:C#,string
0
投稿

猜你喜欢

  • SpringBoot注解梳理(小结)

    2023-11-10 13:27:19
  • 解决java main函数中的args数组传值问题

    2021-06-24 12:46:13
  • 详解Java线程同步器CountDownLatch

    2023-08-23 18:42:39
  • Java如何将字符串String转换为整型Int

    2023-11-10 21:40:19
  • idea中的Maven导包失败问题解决方案汇总

    2023-07-12 12:34:22
  • 浅谈java的守护线程与非守护线程

    2023-11-25 06:50:23
  • struts1之简单mvc示例_动力节点Java学院整理

    2021-10-28 14:43:03
  • springmvc限流拦截器的示例代码

    2021-09-08 02:50:55
  • Java根据ip地址获取归属地实例详解

    2023-11-25 06:24:38
  • springboot多模块化整合mybatis,mapper自动注入失败问题及解决

    2022-02-20 08:06:29
  • Java编程实现判断网上邻居文件是否存在的方法

    2022-12-27 09:49:46
  • 关于MyBatis plus条件构造器的逐条详解

    2021-10-06 07:31:51
  • 关于java 图形验证码的解决方法

    2023-08-09 15:21:19
  • Java DecimalFormat 保留小数位及四舍五入的陷阱介绍

    2023-11-09 04:49:33
  • SpringBoot中的Aop用法示例详解

    2023-03-31 14:12:00
  • springboot v2.0.3版本多数据源配置方法

    2023-07-27 06:37:57
  • Java序列化JSON丢失精度问题的解决方法(修复Long类型太长)

    2022-10-15 00:01:34
  • 如何使用Spring AOP的通知类型及创建通知

    2022-03-19 19:32:51
  • Java synchronized关键_动力节点Java学院整理

    2023-11-10 11:08:53
  • Flutter 通过Clipper实现各种自定义形状的示例代码

    2023-06-19 14:25:11
  • asp之家 软件编程 m.aspxhome.com