什么是不可变的引用?

时间:2010-12-29 14:09:24

标签: android

嗨我发现Uri是不可改变的参考我不知道它是不可变引用的确切含义...任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:4)

这是一个设置后无法更改的变量。当您拥有多线程代码时非常有用,因为能够更改变量的值可能是代码中许多难以发现的问题的来源。

如果它是不可变的,那通常是好的。

答案 1 :(得分:2)

.NET Framework中不可变类的一个很好的例子是System.String。创建String对象后,您无法更改它。没有办法绕过它;这就是课程设计的方式。您可以创建副本,这些副本可以是原始副本的修改形式,但只要它存在,您就无法更改原始实例,而无需使用不安全的代码。如果您了解这一点,那么您可能已经开始了解我要去的地方的要点:将基于参考的对象传递给方法,以便可以保证客户端在方法调用期间不会更改,它本身必须是不可改变的。

在诸如CLR之类的世界中,默认情况下通过引用保持对象,这种不变性的概念变得非常重要。假设System.String是可变的,让我们假设您可以编写一个方法,如下面的虚构方法:

public void PrintString( string theString )
{
   // Assuming following line does not create a new
   // instance of String but modifies theString
   theString += ": there, I printed it!";
   Console.WriteLine( theString );
}

想象一下,当调用者在调用此方法的代码中进一步深入时,调用者会感到沮丧,现在他们的字符串会将这些额外的内容附加到其末尾。如果系统可能会发生这种情况。字符串是可变的。您可以看到String的不变性存在是有原因的,也许您应该考虑为您的设计添加相同的功能。

答案 2 :(得分:2)

EX:字符串是不可变的...
如果你有ex string s =“whatever”
你输出大写字母..
为ex Console.Write(s.ToUpper())
控制台将打印你WHATEVER ...但字符串s仍然是什么...不像可变类型,它会将字符串从WHATEVER改为

答案 3 :(得分:0)

“不可变”的意思是“不能改变价值”

“mutable”==“changeable”

“不可变”==“不可更改”

答案 4 :(得分:0)

在java中,每个东西都被视为String和object,现在尝试认为如果创建了一个10000行的程序,并且在这里你已经添加了100次“public”,所以你认为每次这个公众是在存储中创建。否则我们可以做什么,我们可以创建类似的东西,当我们发现这样的东西时,我们将从那里取出它(字符串池)

相关问题