回答
由於int
具有固定的長度,而長度string
是可變的。因此,編譯器可以保留一個固定的區域爲int
S(主要在棧),並且它必須保持一個string
S於堆char數組的柔性緩衝。
如果例如「String」是一個值類型,那麼就有可能使它成爲一個值類型。包含一個'Char []'類型的字段。這種設計的優點是允許'default(String)'表現爲一個空字符串[如前面的COM框架中的情況]而不是空值,但會有缺點:只要字符串被轉換爲「Object」。 – supercat
int是值類型,而string是引用類型。值類型在傳遞給方法或將它們分配給新變量等時通過值(複製)傳遞。引用類型只能複製引用。
複製是快像整數或浮點數的小物件,但在某些時候在複製操作的成本變得昂貴,因此參考比複製的值的所有的時間是優選的。
雖然字符串也是不可改變的,最喜歡的值類型(是否有任何可變的值類型?),因爲字符串可以是相當大的,他們是不是按值傳遞一個很好的候選人。
不完全如此。由於其關於長度的固有動態特性,編譯器無法爲字符串分配固定大小的內存塊。 –
是的,可以有可變的值類型(你可以定義你自己的結構),但不是,這不是一個好主意。 –
@ThomasWeller:'String'可能已被定義爲一個結構,其中包含一個專用字段,用於保存對某個可變大小對象的對象的引用,例如'Char []'永遠不會被修改。這樣的設計可以讓'default(String)'表現爲一個空字符串而不是一個空值,這可能會緩解爲COM編寫的代碼的移植,該代碼將全零位指針視爲一個空字符串的合法表示。然而,將這種字符串轉換爲「Object」將需要拳擊或特殊的框架「魔術」來避免拳擊。 – supercat
- 1. 是什麼結構和類
- 2. c#.net中System.String和System.string的區別是什麼?
- 3. 無法在System.Int32和System.String錯誤
- 4. C#錯誤:System.Data.EvaluateException:無法對System.String和System.Int32
- 5. 爲什麼使用結構,而不是
- 6. 爲什麼Void是一個結構?
- 7. 什麼是結構初始化爲C++
- 8. 爲什麼DateTime是.Net中的結構?
- 9. 什麼是錯結構和MMAP
- 10. 什麼是JavaScript結構`{}`和`call()`?
- 11. 什麼是「和 - 產品」數據結構?
- 12. 這是什麼C#結構
- 13. IQueryable的結構是什麼?
- 14. 這是什麼linux結構
- 15. 什麼是Eclipse的結構?
- 16. Resolv.conf的結構是什麼?
- 17. AppxSignature.p7x的結構是什麼?
- 18. jQuery:這是什麼結構?
- 19. 這是什麼C++結構?
- 20. 什麼是contacts.edb結構?
- 21. 這是什麼javascript結構?
- 22. GetType爲什麼返回System.Int32而不是Nullable <Int32>?
- 23. 什麼是快(OBJ作爲結構!= NULL)或(obj是結構)在C#.NET
- 24. 爲什麼.NET的版本是類而不是結構?
- 25. 爲什麼異常是一個類,而不是結構?
- 26. 爲什麼結果是NaN?
- 27. 構建obj和exe文件的最佳dir結構是什麼?
- 28. 什麼是PHPCI - 什麼是構建?
- 29. WCMS的層次結構是什麼?
- 30. 什麼是Cassandra的索引結構
首先,請閱讀是什麼struct'和'class'之間'的區別。第二,因爲'int'是'32位',這對'struct'來說是完美的。但是你無法知道'string' _can have_ .. –