【发布时间】:2011-06-01 02:04:58
【问题描述】:
您好,我发现 Uri 作为不可变引用我不知道不可变引用的确切含义是什么...有人可以帮助我吗?
【问题讨论】:
标签: android
您好,我发现 Uri 作为不可变引用我不知道不可变引用的确切含义是什么...有人可以帮助我吗?
【问题讨论】:
标签: android
“不可变”的意思是“不能改变值”
“可变”==“可变”
“不可变”==“不可改变”
【讨论】:
这是一个一旦设置就无法更改的变量。当您拥有多线程代码时非常有用,因为能够更改变量的值可能会导致代码中出现许多难以发现的问题。
如果它是不可变的,它通常是好的。
【讨论】:
.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 );
}
想象一下,当调用者在调用此方法的代码中继续前进时,他们会感到沮丧,现在他们的字符串在其末尾附加了这些额外的东西。如果 System.字符串是可变的。您可以看到 String 的不变性存在是有原因的,也许您应该考虑在您的设计中添加相同的功能。
【讨论】:
EX:字符串是不可变的...
如果你有 for ex 字符串 s ="whatever"
并且你用大写字母输出它..
for ex
Console.Write(s.ToUpper())
控制台将打印 u WHATEVER...但字符串 s 仍将是任何...不像可变类型,它将字符串从任何更改为 WHATEVER
【讨论】:
在 java 中,每件事都被视为 String 和 object ,现在尝试认为如果创建了一个 10000 行的程序,并且在其中添加了“public”100 次,那么你认为每次这个 public 是在存储中创建。否则我们可以做什么,我们可以创建类似的东西,当我们找到类似的东西时,我们将从那里获取它(字符串池)
【讨论】: