为什么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. 2. 3. string详解:
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="agcsmallmacsmallgggsmall string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase) foreach(string i in resultString) Console.WriteLine(i.ToString()); 输出下面的结果:agc mac ggg ytx 0. 1.
C#到底是什么时候传引用?什么时候传值?
传值的情况 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool 传引用的情况:class、Delegate、Interface 当使用操作符"="以及函数传参数的时候: 有人说,我硬要把值当引用传怎么办?
a、用ref关键字
b、用数组,数组是class
c、凉拌:)
2. String传值还是传引用 C#的String声明是class String,当然是传引用。 不过,之所以有这个疑惑,多数是因为这个情况:
string a = "aaa";
string b = a;
b = "bbb";
或者是这么几行代码:
public void Swap(string s1, string
s2)
{
}
这时候结果一打印,结果发现a的值还没有变,Swap也没有成功,这时候就会有幻觉:是不是没有传引用啊?
呵呵,string不会这么粗暴的打乱“声明为class就是传引用”这种规则的。
分析一下:
string a =
"aaa";
string b =
a;
b =
"bbb";
Swap函数也是这样,比如说传了a, b进去(a="aaa",
b="bbb"),
结果是,s1和s2确实是Swap了,但是这种结果并不会影响到a和b
3. string和String有什么区别? MSDN中对string的说明:string is an
alias for String in the .NET
Framework
呵呵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. 2. 3. string详解:
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="agcsmallmacsmallgggsmall string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase) foreach(string i in resultString) Console.WriteLine(i.ToString()); 输出下面的结果:agc mac ggg ytx 0. 1.
C#到底是什么时候传引用?什么时候传值?
传值的情况 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool 传引用的情况:class、Delegate、Interface 当使用操作符"="以及函数传参数的时候: 有人说,我硬要把值当引用传怎么办?
a、用ref关键字
b、用数组,数组是class
c、凉拌:)
2. String传值还是传引用 C#的String声明是class String,当然是传引用。 不过,之所以有这个疑惑,多数是因为这个情况:
string a = "aaa";
string b = a;
b = "bbb";
或者是这么几行代码:
public void Swap(string s1, string
s2)
{
}
这时候结果一打印,结果发现a的值还没有变,Swap也没有成功,这时候就会有幻觉:是不是没有传引用啊?
呵呵,string不会这么粗暴的打乱“声明为class就是传引用”这种规则的。
分析一下:
string a =
"aaa";
string b =
a;
b =
"bbb";
Swap函数也是这样,比如说传了a, b进去(a="aaa",
b="bbb"),
结果是,s1和s2确实是Swap了,但是这种结果并不会影响到a和b
3. string和String有什么区别? MSDN中对string的说明:string is an
alias for String in the .NET
Framework
呵呵string是String的别名而已,都是一家。
4. String为什么是Immutable,怎么实现的? immutable:对象一旦生成不可改变 关于怎么实现的,在明白了问题2之后很好办,只要不提供任何修改自己成员变量的方法就可以了。顺便声明为sealed,防止不清楚的后来者违反规定:)
String每个看似修改了成员变量的方法,事实上都返回了一个新的String。
比如String.Replace函数,事实上并没有改变原来的串,这也是为什么只有让str =
str.Replace( foo,
bar )才真正完成替换的原因。
看来正有一天真正的把Java和C#区别开来的时候,就明白其中的道理了。 |
|
来自: 紫衣风华 > 《C#基础理论知识》