萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 1097|回复: 0

1-1-4-31 关于reference的疑问

[复制链接]
发表于 2003-2-6 16:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
发信人: javarookie (布猫), 信区: Java      
标  题: Re: 关于reference的疑问
发信站: BBS 水木清华站 (Wed Oct  9 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型的好像就没那么幸运了
: ...................
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-21 12:54 , Processed in 0.058733 second(s), 19 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表