1-1-4-31 关于reference的疑问
发信人: javarookie (布猫), 信区: Java标题: Re: 关于reference的疑问
发信站: BBS 水木清华站 (Wed Oct9 16:54:21 2002), 站内信件
class ReferencesTest {
public static void main (String args[]) {
Point pt1, pt2;
pt1 = new Point(100, 100);
pt2 = pt1;
pt1.x = 200;
pt1.y = 200;
System.out.println(“Point1: “ + pt1.x + “, “ + pt1.y);
System.out.println(“Point2: “ + pt2.x + “, “ + pt2.y);
}
}
pt1 存储的不就是对象 Point pt1 的地址吗?
所以 pt2 = pt1;
得到的就是 Point pt1 的地址,此时,pt1,pt2引用同一个对象。不
用看程序就知道无论对 pt1 还是 pt2 做出内部变量的改动,都会对这个对象做出动作
。但是我不同意使用“影响”这个词语,而且也不能说 pt1 pt2 同时改变。在内存里,
实际上只存在一个 Point 对象,而不是两个,只不过有两个变量同时引用这个对象而已
。一定要抛弃 C 语言里面有关“指向”的概念而接受 Java 引用的概念,你就可以理解
两个变量同时引用同一个对象的概念了。
pt2 = new Point(pt1);
这句创建了一个新对象,它的值来自于 pt1,此时,内存中有两个 Point 对象,而且值
相等。
对于后一段程序,是由于你的概念错误,我说过了,除了8个基本变量,所有的其他变量
统统是引用变量,包括 String,String 也是一个对象,而且是一个不可继承的 final
class,API 里面有明确说明。这样就不难理解了吧?你应该恶补一下 Java 基础知识
,Java 程序员将 String 视为基本变量是极不应该的(呵呵,我言重了),不过确实应
该看看 SUN 的 SL-275,基础的知识还是很有用的(我的个人见解,很多人都对基础知
识不屑一顾……)
【 在 fit4u (fight 4 myself fight 4 freedom) 的大作中提到: 】
: 我是一只小小鸟,关于reference看了前人的文章仍有疑问,见程序
: import java.awt.Point;
: class ReferencesTest4 {
: public static void main (String args[]) {
: Point pt1, pt2;
: pt1 = pt2 = new Point(100, 100);
: pt1.x=0;
: pt1.y=0;}}
: 我们看到由于Pt1,pt2 refer to the same object,这样对pt1,pt2任一变量的修改
: 都是original object改变,即Pt1,pt2可是说是同步变化.(这应该是reference的功劳吧)
: 但是同样string型的好像就没那么幸运了
: ...................
页:
[1]