Tip:
Highlight text to annotate it
X
现在 大家都已知道 链表可变
能够改变已有目标的值
但链表和字符串的不同还未真正体现
引入新变量能够让我们看清链表和字符串的差别何在
回到之前的例子
现在 我将加入另一句赋值语句
引入新变量
假定新变量为q
将p的值赋予q
p的值是这个链表
现在由q来指代
记住 执行这句语句之后
p和q指代同一个链表
假定有赋值语句
改变变量q中一个元素的值
假定改变q中元素4的值
就是这个元素
改变为
惊叹号
p的值也同时改变
尽管赋值语句没有提到p
但正因为p和q指代同一个链表
就算没提到p p的值也发生了改变
字符串的话会如何呢
我们用字符串试一试
我们改变字符串第一个字母值时 大家能否猜出
会出现什么情况
运行 看一下
结果是错误
错误原因是字符串不可变
我们不能改变字符串的值
运行结果也显示 不能在字符串中运行赋值语句
因为字符串不可变 不支持赋值语句
可变和不可变目标的主要区别在于
如果目标可变
我们必须对其他变量加以考虑 看它们是否指代同一个目标
因为当改变某一目标值的时候
影响的不仅仅是这一变量
还会改变其他变量的值
举个例子
初始化变量p包含字符串Hello
现在引入了新变量q
p等于q
打印p和q
可以看到这两个变量都包含字符串Hello
现在 我们改变位置0的值
将p位置0的值
改为字母y
这改变了p的值
但同时也改变了q的值
尽管赋值语句完全没有提及q
q的值发生改变 是因为
q和p指代同一目标