为什么他们决定在Java和.NET(以及其他一些语言)中使字符串不可变?他们为什么不让它变得可变?
看到这段代码:
object x = "mehdi emrani";
string y = "mehdi emrani";
Console.WriteLine(y == x);
Run Code Online (Sandbox Code Playgroud)
返回true.
但是这段代码:
object x = "mehdi emrani";
string y = "mehdi ";
y += "emrani";
Console.WriteLine(y == x);
Run Code Online (Sandbox Code Playgroud)
回报false.
因此,当我在第一个代码中比较String和Object时,我得到了true.
但是当我在第二个代码中比较它时,我得到了false.
两个字符串都相同,但为什么当我追加到字符串时,我的结果会返回false?
我最近一直在阅读有关不可变字符串的原因为什么字符串在Java和.NET中不可变?而为什么.NET字符串是不可改变的?以及为什么D选择不可变字符串的一些东西.似乎有很多好处.
更不用说大多数新语言都有不可变的字符串,D2.0,Java,C#,Python等.
C++会从不可变字符串中受益吗?
是否有可能在c ++(或c ++ 0x)中实现具有所有这些优点的不可变字符串类?
更新:
在不可变字符串const_string和fix_str上有两次尝试.五年内都没有更新.它们甚至被使用过吗?为什么const_string没有进入boost?
为此选择了几种语言,例如C#,Java和Python.如果它旨在为比较等操作节省内存或提高效率,它对连接和其他修改操作有什么影响?
我有这个代码:
string str = "valta is the best place in the World";
Run Code Online (Sandbox Code Playgroud)
我需要更换第一个符号.当我尝试这个:
str[0] = 'M';
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误.我怎样才能做到这一点?
我在尝试在C#.net上的日期字符串中替换反斜杠时遇到一些问题.
到目前为止,我正在使用:
string.Replace(@"\","-")
Run Code Online (Sandbox Code Playgroud)
但它还没有完成更换.有人可以帮忙吗?
我想在C#中为字符串末尾添加空格:
Trip_Name1.PadRight(20);
Run Code Online (Sandbox Code Playgroud)
还尝试过:
Trip_Name1.PadRight(20,' ');
Run Code Online (Sandbox Code Playgroud)
这似乎都不起作用.但是我可以用任何其他角色填充字符串.为什么?
我应该更具体,这里是完整的代码:
lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight(20,' ');
Run Code Online (Sandbox Code Playgroud) 使用适用于iOS平台的Delphi XE4,引入了一种新的字符串类型:不可变的基于零的字符串.到目前为止,Delphi在写可变字符串上有副本.所以问题是,这对我未来的编程意味着什么?一种字符串类型比另一种字符串有什么优势吗?当切换到新的字符串类型时,我需要注意哪些陷阱(除了明显的0对1基数)?
这是我上一次采访的方式:
问题:字符串存储在哪里?
答:堆是因为它是参考类型
问题:请解释以下代码:
static void Main(string[] args)
{
string one = "test";
string two = one;
one = one + " string";
Console.WriteLine("One is {0}" , one);
Console.WriteLine("Two is {0}", two);
}
Run Code Online (Sandbox Code Playgroud)
答案:画了两张如下图:
(代表声明, string two = one;

(代表语句, one = one + " string";.在堆上创建一个新字符串并分配)

问题:正确.为下面的代码片段绘制类似的内容:
class Program
{
static void Main(string[] args)
{
Test one = new Test { someString = "test" };
Test two = one;
one.someString = "test String";
Console.WriteLine("One …Run Code Online (Sandbox Code Playgroud) string ×9
.net ×6
c# ×6
immutability ×3
c++ ×2
java ×2
class ×1
delphi ×1
delphi-xe4 ×1
mutable ×1