簡體   English   中英

如何在C#和Javascript中處理字符串VS字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM