楼主: omencathay

[精华] Think in java读书笔记

[复制链接]
论坛徽章:
33
2011新春纪念徽章
日期:2011-01-25 15:41:012012新春纪念徽章
日期:2012-02-13 15:11:52ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14兰博基尼
日期:2013-11-04 12:55:50马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
11#
 楼主| 发表于 2003-6-19 10:22 | 只看该作者
思考:以上的输出结果为什么会这样?

使用道具 举报

回复
论坛徽章:
55
生肖徽章:虎
日期:2006-09-06 21:14:232011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
12#
发表于 2003-6-19 10:33 | 只看该作者
一定是选管理选项的时候出了问题,还好没有把帖子删了。菜刀兄,那个输出结果,给你提个醒,在n1=n2之后,n1和n2的引用分别指向哪里?

使用道具 举报

回复
论坛徽章:
33
2011新春纪念徽章
日期:2011-01-25 15:41:012012新春纪念徽章
日期:2012-02-13 15:11:52ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14兰博基尼
日期:2013-11-04 12:55:50马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
13#
 楼主| 发表于 2003-6-19 11:19 | 只看该作者
先谢谢yining的提醒

给变量或者对象赋值和引用是一个比较容易混淆的东西

上面的例子,首先创建一个Number的类,然后在main里,创建了Number类的两个新的实例,通过new给这两个新的实例在内存空间给其分配地址,

第一次分别给两个实例分别赋值,各自贮存在自己获得的内存空间
然后,n1=n2;  实际上是令n1指向n2的内存地址,这样调用n1的值的时候,实际取得的是n2内存所存贮的值
第三次给n1.i赋值,实际上是给n2赋值,因为n1只是n2的一个引用

不知道我以上的理解对不对?
以下为原文

the number class is simple,and two instance of it (n1 and n2)are  created witnin main().the i value within each Number is given a different value,and then n2 is assigned to n1,and n1 is changed,which is a reference to n2.

使用道具 举报

回复
论坛徽章:
55
生肖徽章:虎
日期:2006-09-06 21:14:232011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
14#
发表于 2003-6-19 12:19 | 只看该作者
正是如此。

使用道具 举报

回复
论坛徽章:
33
2011新春纪念徽章
日期:2011-01-25 15:41:012012新春纪念徽章
日期:2012-02-13 15:11:52ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14兰博基尼
日期:2013-11-04 12:55:50马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
15#
 楼主| 发表于 2003-6-19 13:18 | 只看该作者
Aliasing during method calls

Aliasing will also occur when you pass as object into a method.[/COLOR]

example:

//PassObject.java

Class Letter{
        char c;
}

public class PassObject{
    static void f(Letter y){
          y.c='z';
    }
    public static void main(String[] Args){
            Letter x=new Letter();
            x.c='a';
            System.out.println("1:x.c:" + x.c);
            f(x);
            System.out.println("2:x.c:" + x.c);
    }
}

运行结果:
1:x.c:a
2:x.c:z

思考:方法f()呼叫的只是 x 的一个别名?

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33奥运会纪念徽章:拳击
日期:2008-04-30 00:44:54
16#
发表于 2003-6-19 13:48 | 只看该作者
别名的意思是多个引用指向同一个对象。

这里y和x指向相同的对象,其实就说pass by reference可能还好懂点。

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2005-10-31 23:46:41蓝色妖姬
日期:2006-04-13 00:20:10会员2006贡献徽章
日期:2006-04-17 13:46:34
17#
发表于 2003-6-19 14:20 | 只看该作者
n1, n2 只是对象的reference

可以理解为n1, n2里面

存储的是指向实例的指针。

使用道具 举报

回复
招聘 : Hadoop大数据库开发
论坛徽章:
39
生肖徽章2007版:猴
日期:2008-01-02 17:35:532010年世界杯参赛球队:阿根廷
日期:2010-07-02 16:05:252010年世界杯参赛球队:加纳
日期:2010-04-26 12:31:372010新春纪念徽章
日期:2010-03-01 11:06:23祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:22生肖徽章2007版:猴
日期:2009-03-10 21:29:55生肖徽章2007版:猴
日期:2009-03-10 21:23:27IT宝贝
日期:2009-02-18 13:00:30生肖徽章2007版:猴
日期:2008-12-25 14:22:01
18#
发表于 2003-6-20 14:26 | 只看该作者
搬个板凳,占个坑!

使用道具 举报

回复
论坛徽章:
33
2011新春纪念徽章
日期:2011-01-25 15:41:012012新春纪念徽章
日期:2012-02-13 15:11:52ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14兰博基尼
日期:2013-11-04 12:55:50马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
19#
 楼主| 发表于 2003-6-20 17:44 | 只看该作者
Auto increment and decrement

Example:

//AutoInc.java

public class AutoInc{
        public static void main(String[] Args){
               int i=1;
               prt("i:"+i);
               prt("++i:"+ ++i);
               prt("i++:"+ i++);
               prt("i:"+i);
               prt("--i:"+ --i);
               prt("i--:"+ i--);
               prt("i:"+i);
       }
       static void prt(String s){
               System.out.pringln(s);
      }
}

//思考:这么多++,--到底是干什么用的?

使用道具 举报

回复
论坛徽章:
33
2011新春纪念徽章
日期:2011-01-25 15:41:012012新春纪念徽章
日期:2012-02-13 15:11:52ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14兰博基尼
日期:2013-11-04 12:55:50马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
20#
 楼主| 发表于 2003-6-20 17:48 | 只看该作者
the output for this program is :

i:1
++i:2
i++:2
i:3
--i:2
i--:2
i:1

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表