网上文章都说是传值,有文章如下说
当你向一个方法传递一个对象时,Java没有把对象放入堆栈,它只是拷贝对象的引用然后将这个引用的拷贝放入堆栈。也就是说,根据定义,Java使用的是传值方式。可是我做试验,怎么觉得是传的引用呢
代码如下
Foo.java
public class Foo {
public int bar;
}Test.java
public class Test {
    public static void main(String []args) {
        Foo f = new Foo();
        f.bar = 5;
        System.out.println("f.bar=" + f.bar);
        func(f);
        System.out.println("f.bar=" + f.bar);
    }    public static void func(Foo p) {
        p.bar = 6;
    }
}输出结果是
f.bar=5
f.bar=6对象在方法中被改变,这不是传引用的结果吗

解决方案 »

  1.   

    当你向一个方法传递一个对象时,Java没有把对象放入堆栈,它只是拷贝对象的引用然后将这个引用的拷贝放入堆栈。也就是说,根据定义,Java使用的是传值方式。我觉得这句话已经说的很清楚了,就是传值。
      

  2.   

    Java是传对象的复本,所以是传值。
      

  3.   

    基本对象传递的是值,这是毫无疑问的
    非基本对象传递的是引用,但这个引用本身是通过值传递来实现的
    例如:
    public static void tripleSalary(Employee x)
    {
    x.raiseSalary(100);
    }
    调用
    test=new Employee(...);
    tripleSalary(test);
    将改变对象中的数据的值,因为此时test和x都指向相同的对象
    但是例如:
    public static void swap(Employee x,Employee y)
    {
    Employee temp=x;
    x=y;
    y=temp;
    }
    调用
    Employee a=new Employee(...);
    Employee b=new Employee(...);
    swap(a,b);
    是不会改变x,y指向的对象的,尽管a和x、b和y指向的是相同的对象,但a,b仅仅是x,y的拷贝
    这与c++中的引用a=&x是不同的
      

  4.   

    xstom19(hh) core java 看的不错
      

  5.   

    xstom19(hh) core java volume 1 example ^^
    ----------------------------------        func(f);
            System.out.println("f.bar=" + f.bar);
        }    public static void func(Foo p) {
            p.bar = 6;
        }那上面的代码根据这句话:
    当你向一个方法传递一个对象时,Java没有把对象放入堆栈,它只是拷贝对象的引用然后将这个引用的拷贝放入堆栈。也就是说,根据定义,Java使用的是传值方式。func(f);当调用这个方法传递一个对象时,实际p是f的一个COPY,并把这个引用放到堆栈中,而堆中对象的内容还是一个,复制的只是引用??这时改变p相当于改变了f,因为他们指向同一个对象,只是二个引用。不知道我解释的对不对,呵呵。
      

  6.   

    Employee temp=x;
    是不是这样理解:Employee temp 系统分配空间给temp(相当于C中的指针,该指针指向系统分配的空间);temp=x将x的拷贝放在该分配空间呢?
      

  7.   

    java在运行时就是不断的在传值变值么,关键是你要理解传的值代表的是什么?这个清楚就好办了
      

  8.   

    在Java中,传参时,都是以传值的方式进行。
    对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。
      

  9.   

    myeclipse+struts+hibernate+spring学习论坛群9967568
      

  10.   

    不过String是一个比较特别的
      

  11.   

    java 中用堆栈来存储引用 用堆来存储对象 (非基本数据类型对象)
    基本数据类型直接存储在栈中
    传的时候是传堆栈中的数据 所以基本数据类型是传值 而其他是传引用!
      

  12.   

    上面的诸位这也算回答嘛~~问地球先说火星?
    我刚学java的学生,不过static功能还是知道的,静态的话就是相当于只有指针(引用或者别的什么?)没有副本了,而且对象前面已经创建了,所以可以直接写入数据了,就这些