WEB开发网
开发学院WEB开发Jsp 一个绝对害了不少人的Java技术问题! 阅读

一个绝对害了不少人的Java技术问题!

 2008-01-05 09:56:53 来源:WEB开发网   
核心提示:在java中方法参数的传递,对象是传递引用,一个绝对害了不少人的Java技术问题!,基本数据类型是传递值,而且一直一来都似乎没有人提出过疑问,而不嫩说是传递引用或者引用传递, 我不知道这究竟属于翻译的错误, 直到最近,我在为公司基本Java开发人员编写考试试卷的时候

  在java中方法参数的传递,对象是传递引用,基本数据类型是传递值。而且一直一来都似乎没有人提出过疑问。
  直到最近,我在为公司基本Java开发人员编写考试试卷的时候,我才发现,这错了!在方法中,Java语言中对象传递的是地址,而不是引用,这两个概念是有非常大的差别的,我相信熟悉c++的人都应该知道。
  例如下面:假设对象Test有name的属性。
  public void call(Test t) {
  Test t2 = new Test();
  t2.setName("cba');
  t.setName("abc");
  t = t2 ;
  }
  
  public static void main(String[] arg) {
  Test obj = new Test();
  call (obj) ;
  System.out.PRintln("obj"+obj.getName());
  }
  这个时候,你们可以发现,打印出来的是"abc" ,而不是"cba",原因是这样的,在这次调用中,等于声明了两个变量obj , t,它们指向的是同一个地址,调用call方法,只是将obj指向的地址传递给了t,而obj本身并没有传递过去(也就是没有传递引用),当你重新赋值的时候(也就是将对象引用指向其他存储空间),等于只影响了t,而没有影响obj。
  这样的传递方式只能称之为址传递,或者是引用对象传递,而不嫩说是传递引用或者引用传递。
  我不知道这究竟属于翻译的错误,还是我们理解的错误。但是这样的问题在c++中是有明显的区分的(通过*与&)

Tags:一个 绝对 不少

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接