為什么Java中int小寫String大寫?Java沒有string?在c#中為什么又會有String和string?
思索了很久,在百度和谷歌中也搜了很久,MSDN中也查閱了一下,但這個問題始終還是困擾著我。
首先針對Java中int小寫String大寫的問題,網上是這樣說的。int是關鍵字,而String是類,所有的關鍵字都是小寫,至此我又產生了一個問題。字符串類型和其他類型區別在哪?也就是說String和short、byte等類型的區別在哪?我越來越混沌名單,但好像也越來越清晰對他們的看法。
為什么c#中String和string都可以聲明字符串?而Java中只用String來聲明呢?這也就是說為什么Java中聲明字符串不是像聲明整型那樣用關鍵字來定義呢?
下面是粘貼來的:
String和string的區別
從位置講:
1.String是.NET Framework里面的String,小寫的string是C#語言中的string
2.如果把usingSystem;刪掉,沒有大寫的String了,System是.NET Framework類庫中的一個函數名.
從性質講:
1. string是關鍵字,String是類,string不能作為類、結構、枚舉、字段、變量、方法、屬性的名稱
2. 用C#編寫代碼的情況下盡量使用小寫的string,比較符合規范,如果在追求效率的情況下可以使用大寫的String,因為最終通過編譯后,小寫的string會變成大寫的String,可以給編譯減少負荷,從而運行效率提高。
3. string 類型表示 Unicode 字符的字符串,string 是.NET Framework 中的 String 的別名,對字符串相等性的測試更為直觀
string詳解:
string s = string.Empty:一個指向空字符串的字符串變量, s不占用存儲空間.s變量可以使用,比如s.Length
string s = "";一個指向"\0"的空字符串, 占用一個字節存儲空間,因為轉義符\0代表字符串結束.s變量可以使用,比如s.Length
string s = null; 一個指不向任何一個存儲空間的變量,s不可以使用
單個字符分割:
string s="abcdeabcdeabcde";
string[] sArray=s.Split('c');
foreach(string i in sArray)
Console.WriteLine(i.ToString());
輸出下面的結果:
ab
deab
deab
de
多個字符分割:
string s="abcdeabcdeabcde
string[] sArray1=s.Split(new char[3]{'c','d','e'});
foreach(string i in sArray1)
Console.WriteLine(i.ToString());
可以輸出下面的結果:
ab
ab
ab
多個字符分割(正則表達式):
string content="agcsmallmacsmallgggsmallytx";
string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase)
foreach(string i in resultString)
Console.WriteLine(i.ToString());
輸出下面的結果:agc
mac
ggg
ytx
0. 問題:
1.C#到底是什么時候傳引用?什么時候傳值?
2. String傳值還是傳引用
3. string和String有什么區別?
4. String為什么是Immutable,怎么實現的?
以下查詢結果以及我的理解:
1.C#到底是什么時候傳引用?什么時候傳值?
傳值的情況 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool
傳引用的情況:class、Delegate、Interface
當使用操作符"="以及函數傳參數的時候:
傳值的結果是把原對象復制了一份,接收者指向原對象。
傳引用的結果是直接讓接收者指向原對象。
有人說,我硬要把值當引用傳怎么辦?
a、用ref關鍵字
b、用數組,數組是class
c、涼拌:)
2.String傳值還是傳引用
C#的String聲明是classString,當然是傳引用。
不過,之所以有這個疑惑,多數是因為這個情況:
string a = "aaa";
string b = a;
b = "bbb";
或者是這么幾行代碼:
public void Swap(string s1, strings2)
{
string temp=s1;
s1=s2;
s2=temp;
}
這時候結果一打印,結果發現a的值還沒有變,Swap也沒有成功,這時候就會有幻覺:是不是沒有傳引用啊?
呵呵,string不會這么粗暴的打亂“聲明為class就是傳引用”這種規則的。
分析一下:
string a ="aaa"; //==>a----->new String("aaa")
string b =a; //==>b----->a, 傳引用
b ="bbb"; //==> b----->new String("bbb"),傳引用,b指向了一個新的字符串,a并沒有變。
Swap函數也是這樣,比如說傳了a, b進去(a="aaa",b="bbb"),
//s1----->a, s2----->b
stringtemp=s1;//temp----->s1----->a
s1=s2; //s1----->s2----->b;
s2=temp; //s2----->temp----->a
結果是,s1和s2確實是Swap了,但是這種結果并不會影響到a和b
3. string和String有什么區別?
MSDN中對string的說明:string is analias for String in the .NETFramework
呵呵string是String的別名而已,都是一家。
4.String為什么是Immutable,怎么實現的?
immutable:對象一旦生成不可改變
關于怎么實現的,在明白了問題2之后很好辦,只要不提供任何修改自己成員變量的方法就可以了。順便聲明為sealed,防止不清楚的后來者違反規定:)
String每個看似修改了成員變量的方法,事實上都返回了一個新的String。
比如String.Replace函數,事實上并沒有改變原來的串,這也是為什么只有讓str =str.Replace( foo,bar )才真正完成替換的原因。
看來正有一天真正的把Java和C#區別開來的時候,就明白其中的道理了。
為什么Java中int小寫String大寫?Java沒有string?在c#中為什么又會有String和string?
思索了很久,在百度和谷歌中也搜了很久,MSDN中也查閱了一下,但這個問題始終還是困擾著我。
首先針對Java中int小寫String大寫的問題,網上是這樣說的。int是關鍵字,而String是類,所有的關鍵字都是小寫,至此我又產生了一個問題。字符串類型和其他類型區別在哪?也就是說String和short、byte等類型的區別在哪?我越來越混沌名單,但好像也越來越清晰對他們的看法。
為什么c#中String和string都可以聲明字符串?而Java中只用String來聲明呢?這也就是說為什么Java中聲明字符串不是像聲明整型那樣用關鍵字來定義呢?
下面是粘貼來的:
String和string的區別
從位置講:
1.String是.NET Framework里面的String,小寫的string是C#語言中的string
2.如果把usingSystem;刪掉,沒有大寫的String了,System是.NET Framework類庫中的一個函數名.
從性質講:
1. string是關鍵字,String是類,string不能作為類、結構、枚舉、字段、變量、方法、屬性的名稱
2. 用C#編寫代碼的情況下盡量使用小寫的string,比較符合規范,如果在追求效率的情況下可以使用大寫的String,因為最終通過編譯后,小寫的string會變成大寫的String,可以給編譯減少負荷,從而運行效率提高。
3. string 類型表示 Unicode 字符的字符串,string 是.NET Framework 中的 String 的別名,對字符串相等性的測試更為直觀
string詳解:
string s = string.Empty:一個指向空字符串的字符串變量, s不占用存儲空間.s變量可以使用,比如s.Length
string s = "";一個指向"\0"的空字符串, 占用一個字節存儲空間,因為轉義符\0代表字符串結束.s變量可以使用,比如s.Length
string s = null; 一個指不向任何一個存儲空間的變量,s不可以使用
單個字符分割:
string s="abcdeabcdeabcde";
string[] sArray=s.Split('c');
foreach(string i in sArray)
Console.WriteLine(i.ToString());
輸出下面的結果:
ab
deab
deab
de
多個字符分割:
string s="abcdeabcdeabcde
string[] sArray1=s.Split(new char[3]{'c','d','e'});
foreach(string i in sArray1)
Console.WriteLine(i.ToString());
可以輸出下面的結果:
ab
ab
ab
多個字符分割(正則表達式):
string content="agcsmallmacsmallgggsmallytx";
string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase)
foreach(string i in resultString)
Console.WriteLine(i.ToString());
輸出下面的結果:agc
mac
ggg
ytx
0. 問題:
1.C#到底是什么時候傳引用?什么時候傳值?
2. String傳值還是傳引用
3. string和String有什么區別?
4. String為什么是Immutable,怎么實現的?
以下查詢結果以及我的理解:
1.C#到底是什么時候傳引用?什么時候傳值?
傳值的情況 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool
傳引用的情況:class、Delegate、Interface
當使用操作符"="以及函數傳參數的時候:
傳值的結果是把原對象復制了一份,接收者指向原對象。
傳引用的結果是直接讓接收者指向原對象。
有人說,我硬要把值當引用傳怎么辦?
a、用ref關鍵字
b、用數組,數組是class
c、涼拌:)
2.String傳值還是傳引用
C#的String聲明是classString,當然是傳引用。
不過,之所以有這個疑惑,多數是因為這個情況:
string a = "aaa";
string b = a;
b = "bbb";
或者是這么幾行代碼:
public void Swap(string s1, strings2)
{
string temp=s1;
s1=s2;
s2=temp;
}
這時候結果一打印,結果發現a的值還沒有變,Swap也沒有成功,這時候就會有幻覺:是不是沒有傳引用啊?
呵呵,string不會這么粗暴的打亂“聲明為class就是傳引用”這種規則的。
分析一下:
string a ="aaa"; //==>a----->new String("aaa")
string b =a; //==>b----->a, 傳引用
b ="bbb"; //==> b----->new String("bbb"),傳引用,b指向了一個新的字符串,a并沒有變。
Swap函數也是這樣,比如說傳了a, b進去(a="aaa",b="bbb"),
//s1----->a, s2----->b
stringtemp=s1;//temp----->s1----->a
s1=s2; //s1----->s2----->b;
s2=temp; //s2----->temp----->a
結果是,s1和s2確實是Swap了,但是這種結果并不會影響到a和b
3. string和String有什么區別?
MSDN中對string的說明:string is analias for String in the .NETFramework
呵呵string是String的別名而已,都是一家。
4.String為什么是Immutable,怎么實現的?
immutable:對象一旦生成不可改變
關于怎么實現的,在明白了問題2之后很好辦,只要不提供任何修改自己成員變量的方法就可以了。順便聲明為sealed,防止不清楚的后來者違反規定:)
String每個看似修改了成員變量的方法,事實上都返回了一個新的String。
比如String.Replace函數,事實上并沒有改變原來的串,這也是為什么只有讓str =str.Replace( foo,bar )才真正完成替換的原因。
看來正有一天真正的把Java和C#區別開來的時候,就明白其中的道理了。