WEBVTT 00:00:00.000 --> 00:00:03.000 现在 大家都已知道 链表可变 00:00:03.000 --> 00:00:05.000 能够改变已有对象的值 00:00:05.000 --> 00:00:10.000 但链表和字符串的不同还未真正体现 00:00:10.000 --> 00:00:14.000 引入新变量能够让我们看清链表和字符串的差别何在 00:00:14.000 --> 00:00:17.000 回到之前的例子 00:00:17.000 --> 00:00:19.000 现在 我将加入另一句赋值语句 00:00:19.000 --> 00:00:23.000 引入新变量 00:00:23.000 --> 00:00:25.000 假定新变量为q 00:00:25.000 --> 00:00:29.000 将p的值赋予q 00:00:29.000 --> 00:00:31.000 p的值是这个链表 00:00:31.000 --> 00:00:34.000 现在由q来指代 00:00:34.000 --> 00:00:37.000 记住 执行这句语句之后 00:00:37.000 --> 00:00:40.000 p和q指代同一个链表 00:00:40.000 --> 00:00:43.000 假定有赋值语句 00:00:43.000 --> 00:00:50.000 改变变量q中一个元素的值 00:00:50.000 --> 00:00:53.000 假定改变q中元素4的值 00:00:53.000 --> 00:00:55.000 就是这个元素 00:00:55.000 --> 00:00:58.000 改变为 00:00:58.000 --> 00:01:01.000 惊叹号 00:01:01.000 --> 00:01:03.000 p的值也同时改变 00:01:03.000 --> 00:01:07.000 尽管赋值语句没有提到p 00:01:07.000 --> 00:01:11.000 但正因为p和q指代同一个链表 00:01:11.000 --> 00:01:13.000 就算没提到p p的值也发生了改变 00:01:13.000 --> 00:01:15.000 字符串的话会如何呢 00:01:15.000 --> 00:01:17.000 我们用字符串试一试 00:01:17.000 --> 00:01:20.000 我们改变字符串第一个字母值时 大家能否猜出 00:01:20.000 --> 00:01:23.000 会出现什么情况 00:01:23.000 --> 00:01:25.000 运行 看一下 00:01:25.000 --> 00:01:27.000 结果是错误 00:01:27.000 --> 00:01:30.000 错误原因是字符串不可变 00:01:30.000 --> 00:01:32.000 我们不能改变字符串的值 00:01:32.000 --> 00:01:36.000 运行结果也显示 不能在字符串中运行赋值语句 00:01:36.000 --> 00:01:41.000 因为字符串不可变 不支持赋值语句 00:01:41.000 --> 00:01:44.000 可变和不可变对象的主要区别在于 00:01:44.000 --> 00:01:47.000 如果对象可变 00:01:47.000 --> 00:01:51.000 我们必须对其他变量加以考虑 看它们是否指代同一个对象 00:01:51.000 --> 00:01:53.000 因为当改变某一目标值的时候 00:01:53.000 --> 00:01:57.000 影响的不仅仅是这一变量 00:01:57.000 --> 00:02:00.000 还会改变其他变量的值 00:02:00.000 --> 00:02:02.000 举个例子 00:02:02.000 --> 00:02:07.000 初始化变量p包含字符串Hello 00:02:07.000 --> 00:02:11.000 现在引入了新变量q 00:02:11.000 --> 00:02:13.000 p等于q 00:02:13.000 --> 00:02:15.000 打印p和q 00:02:15.000 --> 00:02:19.000 可以看到这两个变量都包含字符串Hello 00:02:19.000 --> 00:02:23.000 现在 我们改变位置0的值 00:02:23.000 --> 00:02:26.000 将p位置0的值 00:02:26.000 --> 00:02:30.000 改为字母y 00:02:30.000 --> 00:02:35.000 这改变了p的值 00:02:35.000 --> 00:02:43.000 但同时也改变了q的值 00:02:43.000 --> 00:02:46.000 尽管赋值语句完全没有提及q 00:02:46.000 --> 00:02:49.000 q的值发生改变 是因为 00:02:49.000 --> 00:02:52.000 q和p指代同一对象