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