标签: immutability

如果字符串是不可变的,这是否意味着值重新分配会创建一个具有相同名称的新字符串对象?

例如:

string test = "abcde"; // "abcde"
test = test.Substring(1); //"bcde"
Run Code Online (Sandbox Code Playgroud)

这是否意味着test第二行与第一行不是同一个对象test?即编译器创建了一个新的字符串对象实例并称之为'test',第一个'test'被发送到垃圾收集器?

如果是这样,这是我需要关注的吗?

谢谢

c# string object immutability

0
推荐指数
2
解决办法
321
查看次数

什么使String不可变?

我知道字符串是不可变的,但为什么呢?

哪个概念使字符串类不可变?

public class Mainclass
{
    public static void main(String[] args) 
    {
        String s = "Example";
        s.toUpperCase();
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Example
Run Code Online (Sandbox Code Playgroud)

java string class immutability

0
推荐指数
1
解决办法
183
查看次数

为什么每次乘法后我的变量值都没有更新?

为什么poc在每次乘法完成后我的变量值都没有更新System.out.println();

public static void main(String[] args) {
    byte poc = 0b0001;

    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: …
Run Code Online (Sandbox Code Playgroud)

java immutability

0
推荐指数
1
解决办法
63
查看次数

如果常量是不可变的,为什么我可以使用let重新分配它们?

来自Apple文档" 学习Swift的基本知识 "

常量是在第一次声明后保持不变的值,而变量是可以更改的值.常量被称为不可变,意味着它不能被改变,并且变量是可变的.如果您知道代码中不需要更改值,请将其声明为常量而不是变量.

然而在REPL中,我可以这样做:

 14> let favoriteNumber = 4
favoriteNumber: Int = 4
 15> let favoriteNumber = 5
favoriteNumber: Int = 5
Run Code Online (Sandbox Code Playgroud)

我显然遗漏了一些东西:这种差异与编译器或运行时有关,还是其他什么?

在此输入图像描述

constants immutability ios swift

0
推荐指数
1
解决办法
90
查看次数

更改val字段的值

是否可以改变val字段的值?如果是这样,那只是通过构造函数而不是程序中的任何地方完成的吗?使用val意味着永远不能修改内存位置?例如: val x = 5 我可以再次使用x指向具有不同值的其他位置吗?

scala immutability

0
推荐指数
2
解决办法
4874
查看次数

不可变对象(如String)的实际好处是什么,而不是仅使用静态final?

我的意思是,为什么存在defacto不可变对象?为什么我们不只是使用最终的静态修饰符?关于String,Java使它变得不可变的重要性是什么?

java string static final immutability

0
推荐指数
1
解决办法
227
查看次数

NSMutableDictionary是不可变的

在myClass.h中,我有

@property (copy, atomic) NSMutableDictionary *thisParticularWordList;
Run Code Online (Sandbox Code Playgroud)

在myClass.m中,我填充thisParticularWordList,如下所示:

theSubview.thisParticularWordList = [NSMutableDictionary dictionaryWithDictionary: someDictionary];
Run Code Online (Sandbox Code Playgroud)

在xcode的变量视图中,我看到,该实例的属性确实已填充.

在我的代码的其他地方,我尝试这样做:

[self.thisParticularWordList removeObjectForKey:self.theKey];
Run Code Online (Sandbox Code Playgroud)

但不知何故,self.thisParticularWordList变成了一个不可变的NSDictionary.

我究竟做错了什么?

immutability nsmutabledictionary ios

0
推荐指数
1
解决办法
116
查看次数

将不可变列表传递给ImmutableList.copyOf()?

我有以下代码:

private static final ImmutableMultimap<String, String> namesToAddress;

public static List<String> getAddresses(String name){
  return ImmutableList.copyOf(namesToAddress.get(name));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是防御性copyOf()在这里是必要的,因为get()仍然返回一个不可变列表?

注意我正在使用Google Guava的ImmutableMultiimap.

谢谢.

java immutability guava defensive-copy

0
推荐指数
1
解决办法
535
查看次数

为什么首选使用不可变对象作为Set的元素?

在这里读到:

不可变对象是良好的Map键和Set元素,因为这些通常在创建后不会更改.

java collections dictionary set immutability

0
推荐指数
1
解决办法
151
查看次数

如何替换不可变数组scala中的值

我有一个阵列

val doot = Array("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)

我想用字母"z"替换第二个索引,但我不想修改doot.我想创建一个新数组,因为这似乎是scala中的成语.

到目前为止,我只能通过更新修改数组

doot.update(1, "z") // But now doot is modified directly, not ideal!
Run Code Online (Sandbox Code Playgroud)

scala是否提供了这样做的方法?

arrays replace scala immutability

0
推荐指数
1
解决办法
2681
查看次数