[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:03.00,Default,,0000,0000,0000,,现在 大家都已知道 链表可变 Dialogue: 0,0:00:03.00,0:00:05.00,Default,,0000,0000,0000,,能够改变已有对象的值 Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0000,0000,0000,,但链表和字符串的不同还未真正体现 Dialogue: 0,0:00:10.00,0:00:14.00,Default,,0000,0000,0000,,引入新变量能够让我们看清链表和字符串的差别何在 Dialogue: 0,0:00:14.00,0:00:17.00,Default,,0000,0000,0000,,回到之前的例子 Dialogue: 0,0:00:17.00,0:00:19.00,Default,,0000,0000,0000,,现在 我将加入另一句赋值语句 Dialogue: 0,0:00:19.00,0:00:23.00,Default,,0000,0000,0000,,引入新变量 Dialogue: 0,0:00:23.00,0:00:25.00,Default,,0000,0000,0000,,假定新变量为q Dialogue: 0,0:00:25.00,0:00:29.00,Default,,0000,0000,0000,,将p的值赋予q Dialogue: 0,0:00:29.00,0:00:31.00,Default,,0000,0000,0000,,p的值是这个链表 Dialogue: 0,0:00:31.00,0:00:34.00,Default,,0000,0000,0000,,现在由q来指代 Dialogue: 0,0:00:34.00,0:00:37.00,Default,,0000,0000,0000,,记住 执行这句语句之后 Dialogue: 0,0:00:37.00,0:00:40.00,Default,,0000,0000,0000,,p和q指代同一个链表 Dialogue: 0,0:00:40.00,0:00:43.00,Default,,0000,0000,0000,,假定有赋值语句 Dialogue: 0,0:00:43.00,0:00:50.00,Default,,0000,0000,0000,,改变变量q中一个元素的值 Dialogue: 0,0:00:50.00,0:00:53.00,Default,,0000,0000,0000,,假定改变q中元素4的值 Dialogue: 0,0:00:53.00,0:00:55.00,Default,,0000,0000,0000,,就是这个元素 Dialogue: 0,0:00:55.00,0:00:58.00,Default,,0000,0000,0000,,改变为 Dialogue: 0,0:00:58.00,0:01:01.00,Default,,0000,0000,0000,,惊叹号 Dialogue: 0,0:01:01.00,0:01:03.00,Default,,0000,0000,0000,,p的值也同时改变 Dialogue: 0,0:01:03.00,0:01:07.00,Default,,0000,0000,0000,,尽管赋值语句没有提到p Dialogue: 0,0:01:07.00,0:01:11.00,Default,,0000,0000,0000,,但正因为p和q指代同一个链表 Dialogue: 0,0:01:11.00,0:01:13.00,Default,,0000,0000,0000,,就算没提到p p的值也发生了改变 Dialogue: 0,0:01:13.00,0:01:15.00,Default,,0000,0000,0000,,字符串的话会如何呢 Dialogue: 0,0:01:15.00,0:01:17.00,Default,,0000,0000,0000,,我们用字符串试一试 Dialogue: 0,0:01:17.00,0:01:20.00,Default,,0000,0000,0000,,我们改变字符串第一个字母值时 大家能否猜出 Dialogue: 0,0:01:20.00,0:01:23.00,Default,,0000,0000,0000,,会出现什么情况 Dialogue: 0,0:01:23.00,0:01:25.00,Default,,0000,0000,0000,,运行 看一下 Dialogue: 0,0:01:25.00,0:01:27.00,Default,,0000,0000,0000,,结果是错误 Dialogue: 0,0:01:27.00,0:01:30.00,Default,,0000,0000,0000,,错误原因是字符串不可变 Dialogue: 0,0:01:30.00,0:01:32.00,Default,,0000,0000,0000,,我们不能改变字符串的值 Dialogue: 0,0:01:32.00,0:01:36.00,Default,,0000,0000,0000,,运行结果也显示 不能在字符串中运行赋值语句 Dialogue: 0,0:01:36.00,0:01:41.00,Default,,0000,0000,0000,,因为字符串不可变 不支持赋值语句 Dialogue: 0,0:01:41.00,0:01:44.00,Default,,0000,0000,0000,,可变和不可变对象的主要区别在于 Dialogue: 0,0:01:44.00,0:01:47.00,Default,,0000,0000,0000,,如果对象可变 Dialogue: 0,0:01:47.00,0:01:51.00,Default,,0000,0000,0000,,我们必须对其他变量加以考虑 看它们是否指代同一个对象 Dialogue: 0,0:01:51.00,0:01:53.00,Default,,0000,0000,0000,,因为当改变某一目标值的时候 Dialogue: 0,0:01:53.00,0:01:57.00,Default,,0000,0000,0000,,影响的不仅仅是这一变量 Dialogue: 0,0:01:57.00,0:02:00.00,Default,,0000,0000,0000,,还会改变其他变量的值 Dialogue: 0,0:02:00.00,0:02:02.00,Default,,0000,0000,0000,,举个例子 Dialogue: 0,0:02:02.00,0:02:07.00,Default,,0000,0000,0000,,初始化变量p包含字符串Hello Dialogue: 0,0:02:07.00,0:02:11.00,Default,,0000,0000,0000,,现在引入了新变量q Dialogue: 0,0:02:11.00,0:02:13.00,Default,,0000,0000,0000,,p等于q Dialogue: 0,0:02:13.00,0:02:15.00,Default,,0000,0000,0000,,打印p和q Dialogue: 0,0:02:15.00,0:02:19.00,Default,,0000,0000,0000,,可以看到这两个变量都包含字符串Hello Dialogue: 0,0:02:19.00,0:02:23.00,Default,,0000,0000,0000,,现在 我们改变位置0的值 Dialogue: 0,0:02:23.00,0:02:26.00,Default,,0000,0000,0000,,将p位置0的值 Dialogue: 0,0:02:26.00,0:02:30.00,Default,,0000,0000,0000,,改为字母y Dialogue: 0,0:02:30.00,0:02:35.00,Default,,0000,0000,0000,,这改变了p的值 Dialogue: 0,0:02:35.00,0:02:43.00,Default,,0000,0000,0000,,但同时也改变了q的值 Dialogue: 0,0:02:43.00,0:02:46.00,Default,,0000,0000,0000,,尽管赋值语句完全没有提及q Dialogue: 0,0:02:46.00,0:02:49.00,Default,,0000,0000,0000,,q的值发生改变 是因为 Dialogue: 0,0:02:49.00,0:02:52.00,Default,,0000,0000,0000,,q和p指代同一对象