程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#string詳解,

C#string詳解,

編輯:C#入門知識

C#string詳解,


平時用的最多的莫過於string了,但有時遇到的一些問題,不仔細想還真容易出錯,今天我就來總結一下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的別名。

3.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

此時傳遞的是引用本身,而不是副本

4.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)) 

5.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語言中符號<<是什

左移運算符(<<)

將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;

若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位,

左補0 or 補1 得看被移數是正還是負。
 

c語言中符號<<是什

左移運算符(<<)

將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;

若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位,

左補0 or 補1 得看被移數是正還是負。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved