【问题标题】:what is an immutable reference?什么是不可变引用?
【发布时间】:2011-06-01 02:04:58
【问题描述】:

您好,我发现 Uri 作为不可变引用我不知道不可变引用的确切含义是什么...有人可以帮助我吗?

【问题讨论】:

    标签: android


    【解决方案1】:

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

    “可变”==“可变”

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

      .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 的不变性存在是有原因的,也许您应该考虑在您的设计中添加相同的功能。

      【讨论】:

        【解决方案4】:

        EX:字符串是不可变的...
        如果你有 for ex 字符串 s ="whatever"
        并且你用大写字母输出它..
        for ex Console.Write(s.ToUpper())
        控制台将打印 u WHATEVER...但字符串 s 仍将是任何...不像可变类型,它将字符串从任何更改为 WHATEVER

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 1970-01-01
            • 2010-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多