zoukankan      html  css  js  c++  java
  • collection使用的注意事项(例在collection中修改一个位置的属性后后找不到原对象的问题)

    例如,在collection中加入一个String s。我们希望通过修改s来修改collection中对应位置的属性,就直觉看来这种做法完全是可行的,但实际是否满足这种情况呢?

    例如代码:

    String s1 = new String("abc");
    List<String> list = new ArrayList<String>();
    list.add(s1);
    s1 = s1.concat("d");
    System.out.println(list.get(0));
    String s2 = s1.concat("e");
    list.set(0, s2);
    System.out.println(list.get(0));

    我们认为其两次输出应该分别是“abcd”和“abcde”但是,实际是什么状况呢?

    对于两次输出,实际上,第一次输出的结果是“abc”第二次结果为“abcde”为什么会出现这种现象呢?下面我们用snapshot diagram 进行解释。

    产生这种现象的主要原因是,String为immutable的。每次进行更改或者引用都会进行一次复制。当我们修改s1的内容时,其并没有将对应内存空间的属性更改,而是在新的空间创建新的String。而collection仍然对应着原来未修改的空间。这也就造成了我们在一定程度上的困惑。

  • 相关阅读:
    B
    R
    C
    B
    异步解决方案----Promise与Await
    NPM 与 Nodejs
    借助node.js + mysql 学习基础ajax~
    bind、call、apply的区别与实现原理
    私有 npm 仓库的搭建
    学习 Promise,掌握未来世界 JS 异步编程基础
  • 原文地址:https://www.cnblogs.com/mrchi/p/9177205.html
Copyright © 2011-2022 走看看