易混问题总结---(by value VS by reference)

原创 2004年08月12日 19:44:00

传值与传址;
在java中基本型别的传递是通过传值完成的,因此在下面的例子中虽然在Atest()中改变了
传入的int i的值,但是并不会影响原来int i的值,简单点就是传入的int i的值的拷贝罢了
而引用(reference)的传递呢?就有点不同了,在Atest()中的改变影响了原来的对象是内容,
因为在java中reference的传递是by value的,也就是是说,是传递的reference的的拷贝,
+===========内存分配图============+

Object o1 = new Object();
Object o2 = new Object();
+----------此时,存储空间的分配----------+
内存分配图

o1=o2
+----------此时,存储空间的分配----------+
内存分配

此时,将o2的reference的值传递给了o1,因此,现在o1指向的对象是一开始o2指向的对象
了,如果现在改变o1的对象,那么对任何一个调用该对象的方法来讲都是可见的(当然了,o2指向的
也会相应改变了,同一个嘛),所以在下面的例子中:Atest()中po的改变在最后一个println()中表现了出来
+-------------------Example--------------------- ----------------+
import java.awt.Point;
class Passvalue
{
  public static void Atest(Point p,int i){
  p.setLocation(2,2);
  i=12;
  System.out.println("During Atest p = " +p+"/n and i = "+i);
}
public static void main(String arg[]){
  Point po = new Point(0,0);
  int j = 0;
  System.out.println("Before Atest p = " +po+"/n and i = "+j);
  test( po, j);
  System.out.println("After Atest p = " +po+"/n and i = "+j);
}
}
---------- output ----------
Before Atest p = java.awt.Point[x=0,y=0]
 and i = 0
During Atest p = java.awt.Point[x=2,y=2]
 and i = 12
After Atest p = java.awt.Point[x=2,y=2]
 and i = 0

输出完成 (耗时 0 秒) - 正常终止
+-------------------------------------------------------------+

关于 Angular2 学习的一些小结

关于 Angular2 学习的一些小结1. Cannot read property ‘outlets’ of null 的问题
  • codelsls
  • codelsls
  • 2017年03月19日 10:54
  • 1294

MYSQL使用group by时,查询结果的总记录数

在使用group by时 select count(*) from partner.gs_user_info u group by u.username,u.game; 查询结果如下: cou...
  • yu75567218
  • yu75567218
  • 2015年06月10日 10:29
  • 2710

解决混淆报错问题-打包签名出现问题的解决方法

这个问题比较烦人,主要是因为使用了激光推送的功能,然后打包文件发布apk的时候出现了问题,导致了以下的一大堆的错误,不过大家勿急,有解决办法。 [2013-11-28 13:17:19 - Sjh_...
  • u010156024
  • u010156024
  • 2015年08月12日 16:20
  • 2316

Pass by value VS Pass by Reference

  • 2011年10月29日 10:35
  • 24KB
  • 下载

Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)

原文地址:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 在Java中,所有的对象变量都是引用,Java...
  • jubincn
  • jubincn
  • 2012年02月03日 22:56
  • 4050

call by value 和call by reference 部分转载

关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).   首先以两个例子开始: 1) public class Test2 { public ...
  • hanky19
  • hanky19
  • 2013年10月09日 14:44
  • 590

尽量用pass-by-reference-to-const(const引用)替换pass-by-value(传值)

1、尽量以pass-by-reference-to-const替换pass-by-value,前者通常毕竟高校,并可避免切割问题(slicing problem)。 2、以上规则并不适...
  • zyq522376829
  • zyq522376829
  • 2015年09月01日 20:40
  • 750

Does Java pass by reference or pass by value?

Q: If Java uses the pass-by reference, why won't a swap function work? A: Java does manipulate obje...
  • caoguanling2011
  • caoguanling2011
  • 2014年05月23日 18:17
  • 479

回归基础系列-call by value / call by reference区别与实例

call by reference 与 call by value的区别与实例 ①什么叫call by value(值传递),当往方法里传递如int,double等基本类型的变量时,这就是值传递,到方...
  • antgan
  • antgan
  • 2016年03月31日 15:16
  • 2158

关于 pass-by-reference-to-const 和 pass-by-value

第一次写博客,其实算一个读书笔记吧,我觉得记一下可能能增加我得印象,废话不说,直接正题。 这次记一个很小的问题, effective c++ 中 的条款20是:宁以pass-by-reference...
  • nizhannizhan
  • nizhannizhan
  • 2015年02月03日 21:41
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:易混问题总结---(by value VS by reference)
举报原因:
原因补充:

(最多只允许输入30个字)