C#中String和string有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中String和string有啥区别?相关的知识,希望对你有一定的参考价值。
一个开头大写,一个开头小写!
在C#中,string 是 System.String 的别名,所以基本上在使用时是没有差别的。习惯上,我们把字符串当作对象时(有值的对象实体),我们用string。而我们把它当类时(需要字符串类中定义的方法),我们用String,比如:
string greet = String.Format("Hello 0!", place);
其实乱用也可以,只是这样概念上清楚一点。
另外string是C#保留字,不可用作变量名,String就不是了。 参考技术A 从位置讲:
1.String是.NET Framework里面的String,小写的string是C#语言中的string
2.如果把using System;删掉,没有大写的String了,System是.NET Framework类库中的一个函数名.
从性质讲:
1.string是关键字,String是类,string不能作为类、结构、枚举、字段、变量、方法、属性的名称
2.用C#编写代码的情况下尽量使用小写的string,比较符合规范,如果在追求效率的情况下可以使用大写的String,因为最终通过编译后,小写的string会变成大写的String,可以给编译减少负荷,从而运行效率提高。
3.string类型表示 Unicode 字符的字符串,string 是 .NET Framework 中的 String 的别名,对字符串相等性的测试更为直观
string详解:
MSDN中对string的说明:string is an alias for String in the .NET Framework
呵呵string是String的别名而已,都是一家。
string s = string.Empty:一个指向空字符串的字符串变量, s不占用存储空间.s变量可以使用,比如s.Lengthstring s = "";一个指向"\0"的空字符串, 占用一个字节存储空间,因为转义符\0代表字符串结束.s变量可以使用,比如s.Lengthstring s = null;一个指不向任何一个存储空间的变量,s不可以使用
单个字符分割:
strings="abcdeabcdeabcde";
string[]sArray=s.Split('c');
foreach(string i insArray)
Console.WriteLine(i.ToString());
输出下面的结果:
ab
deab
deab
de
多个字符分割:
strings="abcdeabcdeabcde
string[]sArray1=s.Split(new char[3]'c','d','e');
foreach(string i insArray1)
Console.WriteLine(i.ToString());
可以输出下面的结果:
ab
ab
ab
多个字符分割(正则表达式):
stringcontent="agcsmallmacsmallgggsmallytx";
string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase)
foreach(string i inresultString)
Console.WriteLine(i.ToString());
输出下面的结果:agc
mac
ggg
ytx 参考技术B 完全一样,没有区别;
string 和 String(首字母大写)有区别.
string 类型表示一个字符序列(零个或更多 Unicode 字符)。 string 是 .NET Framework 中 String 的别名。
尽管 string 是引用类型,但定义相等运算符( == 和 !=)是为了比较 string 对象(而不是引用)的值。 这使得对字符串相等性的测试更为直观。
String 表示文本,即一系列 Unicode 字符;命名空间: System ;程序集: mscorlib(在 mscorlib.dll 中);String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。 看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。 如果需要修改字符串对象的实际内容,需使用 System.Text .StringBuilder 类 参考技术C string[][]是一维数组。string[,]是二维数组。
string[][]和普通的一维数组不同的是。他的每个元素本身就是又是一个数组。
而string[,]是二维数组。就是数组的每一个元素都必须是长度为2的数组。
比如有下面的数组
[
[1,2,3],
[2,4]
]
那么这个数组必定是string[][]类型而不会是string[,]类型。
因为string[][]定义时:数组的里的每个元素都是数组。(只要是数组就行)
string[,]定义是:数组的每一个元素都必须是长度为2的数组。
可见基本上可以理解都是二维数组但string[][]里的元素长度可以不相等。
string[,]必须长度一致 参考技术D String是公共语言运行时(CLR)中的实现类型,像VB,C++中的字符串类型最终都会编译成此类型,C#中字符串类型是String,而string是C#中字符串类型String的反射,可以理解为一种简化的书写方式,就像int对应于Int32一样,二者在C#中可通用
Java 中的 String[] 和 String... 有啥区别?
【中文标题】Java 中的 String[] 和 String... 有啥区别?【英文标题】:What is the difference between String[] and String... in Java?Java 中的 String[] 和 String... 有什么区别? 【发布时间】:2012-08-11 23:54:43 【问题描述】:我应该如何在 Java 中声明main()
方法?
像这样:
public static void main(String[] args)
System.out.println("foo");
或者像这样:
public static void main(String... args)
System.out.println("bar");
String[]
和 String...
之间的实际区别是什么?
【问题讨论】:
【参考方案1】:我应该如何在 Java 中声明 main() 方法?
String[]
和 String...
在内部是相同的,即。例如,一个字符串数组。
不同之处在于,当您使用可变参数 (String...
) 时,您可以调用如下方法:
public void myMethod( String... foo )
// do something
// foo is an array (String[]) internally
System.out.println( foo[0] );
myMethod( "a", "b", "c" );
// OR
myMethod( new String[] "a", "b", "c" );
// OR without passing any args
myMethod();
当您将参数声明为字符串数组时,您必须这样调用:
public void myMethod( String[] foo )
// do something
System.out.println( foo[0] );
// compilation error!!!
myMethod( "a", "b", "c" );
// compilation error too!!!
myMethod();
// now, just this works
myMethod( new String[] "a", "b", "c" );
String[]
和String
之间实际上有什么区别...如果有的话?
约定是使用String[]
作为主要方法参数,但使用String...
也可以,因为当您使用可变参数时,您可以像调用以数组作为参数的方法一样调用方法,并且参数本身将是方法体内的一个数组。
有一点很重要,当你使用可变参数时,它必须是方法的最后一个参数,并且你只能有一个可变参数。
您可以在此处阅读有关可变参数的更多信息:http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
【讨论】:
【参考方案2】:String...
被转换为String[]
。主要区别在于您可以通过 2 种方式调用 vararg 方法:
method(a, b, c);
method(new String[] a, b, c);
而你需要调用一个接受这样一个数组的方法:
method(new String[] a, b, c);
对于main
方法,它没有任何区别。
【讨论】:
【参考方案3】:String[] args
接受一个数组参数。
String... args
将任意数量的字符串作为其参数并从中创建一个数组。
【讨论】:
【参考方案4】:让我们通过示例及其超级简单来了解区别
mymethod(String... str)
vs
mymethod(String []str)
方法 getid 采用 int 类型数组。 因此,如果我们调用 getId 方法,我们需要传递数组。 要传递数组,我们可以创建匿名数组,或者只是先创建一个数组并像我在下面的示例中那样传递。
class test
public void getid(int []i)
for(int value:i)
System.out.println(value);
public static void main(String []arg)
int []data = 1,2,3,4,5
new test().getid(data);
下面我们使用三点 -> mymethod(int... i) 现在该方法仍然需要数组,但不同的是现在我们可以将值直接传递给该方法,并且“...”会自动将其转换为数组 看下面的例子
class test
public void getid(int ...i)
for(int value:i)
System.out.println(value);
public static void main(String []arg)
new test().getid(1,2,3,4);
使用“...”而不是“[]”的优势 1) 节省内存:- 在示例一中使用 mymethod(int [ ] ) 当我们在主方法“Data[]”中创建一个数组时,它们会创建新对象并在内存中获得空间 以及当我们创建方法并在那里定义参数时:- getid(int []) -> 这将在内存中创建另一个对象,因此我们在内存中有 2 个彼此相同的对象 2)使用“...”时您不能传递任何内容 在示例 2 中,您可以在调用“getid”方法时不传递任何内容,它们将正常工作而不会出现任何错误,这对于使程序更稳定非常有帮助,例如
.
.
.
public static void main(String []arg)
new test().getid();
.
.
.
但是如果我们调用“getid”方法并且在使用“[]”时没有传递任何参数,那么它会在编译时显示错误
【讨论】:
【参考方案5】:String[]
是一个字符串数组。因此,一个包含许多 String
数据类型变量的容器。例如:
String[] strArray = new String[2];
str[0] = "Hello";
str[1] = "World";
String str = "Hello World";
希望这能清除您的疑问 :)
【讨论】:
以上是关于C#中String和string有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
C#中的string[][]和string[,]有啥区别[重复]
C#中的“Main(String [] args)”和“Main(string [] args)”有啥区别[重复]