本帖最后由 陈君 于 2014-5-17 15:10 编辑
附件是我调试的一个程序,我用它来验证值类型和引用类型的区别。用class和int来比较的时候可以发现:
值类型在赋值的时候会直接存储它的数据,就像a=b;a的内存里实际存储的是b的值。
而引用类型则不同。我们看Animal animal = dog。
animal的内存里实际存储的是dog这个对象的引用(地址)。所以当我们队animal.age赋值为20的时候,它实际就是通过其中保存着的地址找到那个存放age的内存单元然后改里面的值。由于animal.age和dog.age都是指向同一个内存,所以一旦那个内存里保存的值变了那么dog.age的值也会变化。就好像 是两个人共用一个装满金子的宝箱,如果一个人把里面的金子换成了石头,那么另一个人打开这个箱子的时候也只能看到石头,而不是原来的金子。
具体过程大家可以看下我的博客http://blog.sina.com.cn/s/blog_db23a6350101mj3h.html
但是在我使用String来调试的时候发现它和class不一样。它更像是一个值类型,
String s1 = "122222";
String s2 = s1;
String s3 = s1;
s2 = "21111111";
这里如果是引用类型的话在s3改变了之后应该s1和s2也会跟着改变才是啊。这到底是为什么啊?或者说我博文里的分析是有问题的?
|