.net String是一种类类型,但是为什么我们不用New关键字来实例化它就可以使用它呢?

.net String是一种类类型,但是为什么我们不用New关键字来实例化它就可以使用它呢?,.net,vb.net,string,.net,Vb.net,String,我有一个关于弦乐课的问题System.String是一种类类型,但是为什么我们不用New关键字来实例化它呢 例如: Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command 根本没有新的关键字被使用如果没有实例化,就无法真正使用它(下

我有一个关于弦乐课的问题
System.String
是一种类类型,但是为什么我们不用
New
关键字来实例化它呢

例如:

Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command
Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command

根本没有新的关键字被使用

如果没有实例化,就无法真正使用它(下面写了一些警告)。你可以:

A) 将一个
字符串
引用复制到另一个
字符串
引用

B) 将
字符串
添加到
值。这是为了简化字符串的使用而添加的。例如,请参见,但对于VB.NET应该是相同的

但是

在VB.NET中,C与C有很大的区别:“内部”VB.NET函数考虑<代码>没有< /C> >等价于“”。所以
Len(Nothing)=0
UCase(Nothing)=
string
类的方法如果在
Nothing
(from和)上使用,仍将抛出异常

我将添加字符串文本(例如
“Foo”
)是在加载定义它们的程序集期间预先构建的。所以如果你这样做了

Dim aString As String = "A String"
您所做的是将包含
“字符串”
的字符串对象的引用复制到
aString

,您可以这样做

char[] chars = { 'w', 'o', 'r', 'd' };
string string1 = new string(chars);

实例化为值为“test”的新字符串 您所说的是访问静态类型成员,例如编写时访问
String.Format
String.Join

Dim s As String = "hello"
您只是在分配一个引用。在幕后,编译器生成代码来实例化包含
“hello”
的字符串对象。该实例化可能发生在分配之前很久,但其全部细节是另一回事

总之,上面的代码没有实例化对象

同样,在您的示例中:

Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command
Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command

没有对象被实例化。所发生的一切就是复制对现有对象的引用。

是的,编译器有一些快捷方式,允许您使用字符串而无需显式创建字符串

当您使用文字字符串时,在您使用它时甚至不会创建它,而是在应用程序启动时创建所有文字字符串,因此您只复制已存在字符串的引用


您的示例与此类似,您不是在创建新字符串,而是在复制已存在字符串的引用。

?我可以使用String=Microsoft.VisualBasic.Interaction.Command
Dim命令行参数。根本没有新的关键词你的答案很不清楚。赋值不复制
字符串
对象,它只是复制引用。@Dee Jay这是一个将引用复制到未实例化的字符串的示例。第二行不实例化新对象,它只会使用对已实例化对象的引用。@RuneFS它会实例化一个新对象,除非存在字符串类的实例,且该实例与“test”匹配。JIT负责处理instantiating@msarchet:如果您想一想,那么检查文本字符串是否存在是没有意义的,因为这样您就需要已经拥有您要查找的字符串。所有文字字符串都是在应用程序启动时创建的,分配文字字符串只是复制一个已知的引用。@Guffa,这是由JIT在应用程序启动时完成的吗?然后,如果找到一个实例,它只使用字符串池引用现有实例,对吗?@msarchet:不,代码找不到字符串,因为它甚至没有查找字符串。JIT编译器已经知道字符串的位置,因此引用直接放在代码中。赋值语句只复制对命令属性getter返回的字符串的引用。标准引用类型行为。把它想象成明信片上的地址,到达同一个邮箱。保证没有人会移动邮箱。在编程术语中称为“不变性”。@汉斯·帕桑:请和我分享一些系统。字符串的奥秘。。。