论坛首页 入门技术论坛

澄清:Java中只有按值传递,没有按引用传递!

浏览 17006 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-01-11  
sdh5724 写道
基础类型, string是值传递。 不过, string比较特别。
其他所有继承Object对象的东西, 都是引用。 因为JAVA实际上, 说的不好听点, 任意时刻任何实例都是全JVM可见的,不然GC就管理不到它了, 看你用角度看这个理解。 整天不F规范上说的人还真不少。 别总觉得E文的技术文章就是真理哦。

 

String类型一样也是引用传递,只不过你不能改变String对象的内容而已,看起来似乎是值传递,如果你自己构造一个只能在构造方法中初始化对象状态,而没有任何改变对象状态的方法类,这个类和String也是一样的

0 请登录后投票
   发表时间:2009-01-11  
本着认真的负责, 我刚仔细看了下
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
这个文章的作者根本不懂JAVA, 用这么个例子说的是传引用:
public void tricky(Point arg1, Point arg2)
{
  arg1.x = 100;
  arg1.y = 100;
  Point temp = arg1;
  arg1 = arg2;
  arg2 = temp;
}
public static void main(String [] args)
{
  Point pnt1 = new Point(0,0);
  Point pnt2 = new Point(0,0);
  System.out.println("X: " + pnt1.x + " Y: " +pnt1.y);
  System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
  System.out.println(" ");
  tricky(pnt1,pnt2);
  System.out.println("X: " + pnt1.x + " Y:" + pnt1.y);
  System.out.println("X: " + pnt2.x + " Y: " +pnt2.y); 
}

通过一个方法调用, 制造一个表面上相同的对象。
实质上, 传值要做对象copy的。 这就成大忌了。

0 请登录后投票
   发表时间:2009-01-12  
rxgp02a 兄 说的很明白了

不管传进来的是什么 JVM都会为其创建一个 副本的
0 请登录后投票
   发表时间:2009-01-13  
按值传递的。。还和同事争执过。。。具体详见 java核心卷。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics