相关疑难解决方法(0)

为什么字符串在Java和.NET中不可变?

为什么他们决定在Java和.NET(以及其他一些语言)中使字符串不可变?他们为什么不让它变得可变?

.net java string mutable

189
推荐指数
9
解决办法
4万
查看次数

为什么.NET String是不可变的?

众所周知,String是不可变的.String不可变的原因是什么,StringBuilder类的引入是可变的?

.net c# string immutability

182
推荐指数
8
解决办法
10万
查看次数

具有字符串类型不可变的非技术优势

我想知道从程序员的角度来看,字符串类型是不可变的好处.

技术优势(在编译器/语言方面)可以概括为,如果类型是不可变的,则更容易进行优化.请阅读此处了解相关问题.

另外,在一个可变的字符串类型中,要么你已经内置了线程安全(然后再次,优化更难),或者你必须自己做.在任何情况下,您都可以选择使用具有内置线程安全性的可变字符串类型,因此这不是不可变字符串类型的优势.(同样,更容易进行处理和优化以确保不可变类型的线程安全,但这不是重点.)

但是不可变字符串类型在使用中有什么好处?让某些类型不可变而其他类型不可变的重点是什么?这对我来说似乎很不一致.

在C++中,如果我想要一些字符串是不可变的,我将它作为const引用传递给function(const std::string&).如果我想要一个原始字符串的可更改副本,我将其作为传递std::string.只有当我想让它变得可变时,我才将它作为reference(std::string&)传递.所以我只能选择我想做的事情.我可以用各种可能的类型做到这一点.

在Python或Java中,某些类型是不可变的(大多数都是基本类型和字符串),而其他类型则不是.

在像Haskell这样的纯函数式语言中,一切都是不可变的.

是否有充分理由说明这种不一致是否有意义?或者仅仅是出于技术上的低级原因?

c++ python java string immutability

17
推荐指数
1
解决办法
2617
查看次数

我可以使std :: string使用更少的内存吗?

在开始之前,我需要声明我的应用程序使用了很多字符串,这些字符串平均很小,并且一旦创建就不会更改.

在Visual Studio 2010中,我注意到std :: string的容量至少为30.即使我写std::string str = "test";了,str的容量也是30. str.shrink_to_fit()尽管std ::存在一个具有相同名称的函数,但该函数对此没有任何作用.矢量和按预期工作,即减少容量,使容量==大小.

  1. 为什么不按std::string::shrink_to_fit()预期工作?
  2. 如何确保字符串分配最少的内存?

c++ memory string visual-studio-2010

7
推荐指数
1
解决办法
1216
查看次数

标签 统计

string ×4

.net ×2

c++ ×2

immutability ×2

java ×2

c# ×1

memory ×1

mutable ×1

python ×1

visual-studio-2010 ×1