博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python、javascript中的不可变对象
阅读量:7153 次
发布时间:2019-06-29

本文共 616 字,大约阅读时间需要 2 分钟。

比如python中str是不变对象,而list是可变对象,javascript中str也是不变对象,而array是可变对象

python的例子:

>>> a = 'abc'>>> a.replace('a', 'A')'Abc'>>> a'abc'

  

javascript的例子:

var a = 'abc';console.log(a.replace('a', 'A'));// Abcconsole.log(a);// abc

  

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?

 

a本身是一个变量,它指向的对象的内容才是'abc'。

 

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了。

 

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

 

转载于:https://www.cnblogs.com/yourstars/p/8204165.html

你可能感兴趣的文章
桌面和任务栏突然出现 爱淘宝.lnk Dandelion.exe
查看>>
面向对象知识汇总
查看>>
PropertyGrid无意的发现DisplayNameAttribute及应用
查看>>
Boost.Asio c++ 网络编程翻译(20)
查看>>
java类与继承的执行顺序
查看>>
PHP面向对象深入研究之【高级特性】
查看>>
[LeetCode] Next Permutation 下一个排列
查看>>
MyBatis Generator 代码生成器 快速入门指南
查看>>
ASP.NET AJAX入门系列(1) AjaxControlToolkit安装篇
查看>>
【写漂亮的博客】让我们的博客更加漂亮,让我们的博客支持响应式布局!
查看>>
linux date 使用
查看>>
MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
查看>>
Eclipse启动报错:JVM terminated. Exit code=2
查看>>
微信-支付模式
查看>>
【Spring实战】—— 1 入门讲解
查看>>
12.3. echo
查看>>
PHP的pcntl多进程
查看>>
迁移式升级的一点思考
查看>>
WM Define Strategy for Fixed Bins(十五.1)
查看>>
关于ORACLE MYSQL在非前缀分区索引上分区剪裁的比较
查看>>