日期:2014-05-20  浏览次数:20654 次

数值传递和引用值传递及引用传递
java的对象传递时使用引用值传递。它其实是和基本数据类型的数值传递本质是一样的。都是将信息直接传递进去.

与基本数据类型的传递方式的不同在于,引用值传递是将对象信息的"寻觅方式"传递给方法而不是对象本身的信息.这里的寻觅方式是关键.

数值传递的缺点在于对象之间不能共享资源,当一个对象改变资源的信息的时候如果不通知其它对象,其它对象是无法获知信息的改变的,而引用传递就可以,因为它传递的不是对象信息,而是对象本身的寻找方式,这样做虽然需要每次自己去查,缺可以共享信息

可以用生活中的例子来解释这个区别。比如说经理写好了一个文件让自己的秘书录制到计算机中,一般来说经理将文件直接交给秘书就可以了。这就是值传递。那么什么是引用值传递呢:比如说经理出差了,突然间想起来让秘书将文件内容录制到计算机中。给秘书打了个电话说:将我的桌子上的文件里的内容录制到计算机中。这就是引用值传递。因为经理没有将文件直接交给秘书,而是告诉了秘书文件的位置。而秘书通过位置找到文件的。即有了位置就能够找到文件对象,也就能够获取文件的内容

上面的例子中的文件的位置就是获取对象的方式。一般来说在计算机中获取对象的方式有:地址获取(也即指针)以及编号获取。地址获取就是将对象在内存中的位置。在生活中的例子还有像信息发布新闻。对于数值传递如果每发布一个新的新闻,都要将这个新闻的内容传递给每个要通知的人,而引用值传递的思想是事先先准备好一个公告栏,然后将公告栏的位置告诉每个人,以后再发布新的新闻的时候只要把新闻发布到公告栏中,这样其他人只要看了公告栏就能知道新的新闻了.在这里将公告栏的位置告诉每个人的过程就相当于计算机中引用值传递的过程。编号传递是指在系统中为每个对象注册一个唯一的编号,然后将这个编号传递给其它对象。而这些对象只需通过编号到系统中去查就可以获取信息了。而数据库中的外键就是这样的例子.在生活中的例子有:一个人有一张银行卡。而他有很多客户订单,他希望他的客户将钱都打到这张银行卡里。那么他只需将银行卡卡号告诉其所有客户,那么每个客户由了这个银行卡卡号就可以往里面存钱了,而无需每次都要通知其本人。而其本人也只需通过银行卡来查询自己卡内的金额.事实上他们之间是通过银行卡卡号来共享一个银行卡的,只是权限不同。只有本人才能取钱,其他人只能存钱

就像上面所说的引用值传递不能实时获取信息而是每次都要查询信息,就像上面的那个拿银行卡的人要时不时的去银行查才能知道钱汇过来了没有.现在再说说引用传递.引用传递是通过系统注册的方法实现数据实时更新,例如现在的银行有短信通知业务的功能。即每当有人往你的银行卡打钱或者取钱都会通过短信的方式告知你。这样你就可以实时的获知你的银行卡里面钱数的信息了。当然短信传递是需要时间的,而且你未必会去看短信,所以在实际生活当中是不可能做到实时更新,但是在计算机系统中可以通过锁的方式来实现

------解决方案--------------------
好好研究
------解决方案--------------------
都 是传值的
------解决方案--------------------
看看,顺便学习下!