[英]How are strings VS chars handled in C# vs Javascript?
在JavaScript中,单引号和双引号在某种程度上是可以互换的,并且很大程度上是样式的问题(这里有一个很好的讨论,为什么在这里的答案之一实际上并非如此: 何时在JavaScript中使用双引号或单引号? )。 如何在C#中处理字符和字符串?
例如:
string test = "hello world";
string test2 = 'hello world'; // Too many characters in character literal
char test3 = 'a';
char test4 = "a"; // Cannot implicitly convert type string to char
它看起来像字符串和字符作为单独的,可互换的类型处理,并且单引号或双引号的使用划分了这个?
类型语言中字符和字符串之间的关系是什么? 具体来说,说一个字符串是一个字符数组是否正确?
说一个字符串是一个字符数组是否正确
在.NET中,字符串是一个对象,包含一个包含UTF-16代码单元的连续内存块。 char
是另一个(原始)数据类型,它只包含一个代码点,没有对象开销。
从Jon Skeet的这篇有趣的博客文章中 ,他比较了.NET与Java的实现:
长字符串由内存中的单个大对象组成。 将其与Java进行比较,其中String在内存消耗方面是“普通”类型,包含char数组的偏移量和长度 - 因此长字符串由引用大型char数组的小对象组成。
C#使用引号指示类型- '
始终是一个char
, "
始终是一个string
。
在.NET中,字符串的行为类似于char
的只读数组,因此:
// Treat string like an array
char c = "This is a string"[3];
int len = "This is a string".Length
// Now we have the char at pos 3
c == 's';
你不能做的就是编辑它们:
// This fails
"This is a string"[3] = 'x';
// This is fine, because we get a new editable char[]
char[] c = "This is a string".ToCharArray();
c[3] = 'x';
在任何.NET语言中都是如此,因为它们都使用相同的字符串实现。 其他强类型框架有不同的处理字符串的方法。
在.NET中, char
可以显式地转换为int
并隐式转换,因此:
char c = (char) 115; // 's'
int i = c; // 115
最后char
是一个值类型,而string
(作为封面下字符字节的集合)实际上是一个不可变的引用类型。 这些在代码中的行为非常相似,但在内存中以不同的方式存储 - 我认为这就是为什么C#区分它们如何分隔 - "s"
和's'
是不同的东西并以不同的方式存储(完全不同于Javascript string
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.