Java本来就不是C++
为什么要一样?

解决方案 »

  1.   

    java是传值吗?好像是传引用吧。
      

  2.   

    把下边这段程序直接用在Main函数中,不用swap函数:
         Employee temp = x;
          x = y;
          y = temp;
      

  3.   

    Java是传值的,任何情况下! 详细见:
    http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
    以前有网友发过这个:
    http://www.javaranch.com/campfire/StoryPassBy.jsp
    用cup做比喻的也很不错
      

  4.   

    方法很简单:其实a,b并没有交换,只是它们各自的另外一个引用交换了,你可以直接这么做:
    Employee temp=null;
    temp=a;
    a=b;
    b=temp;
    根本用不着什么swap()方法
      

  5.   

    对于传值还是传引用,java好象有些硬性的规定,不是都传值,也不是都传引用!
      

  6.   

    我要说的和你上面的题目没有太大关系。但是:
    从你编写的程序来看,你对oop的认识有些问题,对象的引入,目的之一就是数据的封装。在我看来,数据的封装并不仅仅是对数据的访问进行了控制(public or private),而更重要的是将一系列相关数据整合在了一起(某个class就好像是关系型数据库中某张表,而这个class的某个实例就是这张表的一条记录)。你现在想达到的目的,就好像要求数据库在原来a记录的位置放上记录b,而把a放到b上面去。而这两条记录没有发生任何变化。这样做,我认为是没有任何意义的。因为我们是数据本身,而非数据存放的位置,或者这个对象的名称。正确的做法(或许)是改变某条记录中的字段也就是某个对象中的成员变量。而唯一需要关心具体数据存放位置的地方,是这些数据存放的地方本身。比如class Office { //在这里,您或许会需要把他们彼此作为一个整体进行交换
      Employee boss, worker;
      public Office(Employee a, Employee b) {
        this.boss = a; this.worker = b;
      }  public void doSwap() {
        Employee temp = worker; worker = boss ; boss = temp;
      }
    }class Test {
      public static void main(String[] args) {
        Employee a = new Employee(); Employee b = new Employee(); 
        //在这里,直接交换a,b是可以的,但是传递给某个方法,比如
        swap(a,b);
        //进行位置交换,显然没有意义    Office o = new Office(a, b); 
        o.doSwap();
      }  public static swap(Employee a, Employee b) {
        //在这里,应当关心的是a或者b里面存放的数据,比如姓名,薪水。
        a.salary ^= b.salary; b.salary ^= a.salary; a.salary ^= b.salary;
        //而非数据存放的位置。
      }
    }不好意思,我说的太乱,没能正确表达我的想法。而且,这只是我的一家之言,或有错漏,还望各位一笑以弊之
      

  7.   

    上面说的:
    而唯一需要关心具体数据存放位置的地方,是这些数据存放的地方本身
    指的是长期保存这些数据集(某个对象)的地方,也就是另外一个(更高级的)对象(比如office)中的成员变量。就好比另外一张表(Office类型)中的某条记录(某个Office实例)中的某(几)个字段(boss&worker)。而作为局部变量来说,你改变其指针只是会在当前方法内起作用。实在不要意思,说的乱七八糟,连自己也不知道在讲什么了
      

  8.   

    看了大家的帖子,了解了很多.不管是否面向对象.
    我比较叫真,改了改程序,这样做就行了,虽然麻烦点.public class ParamTest
    {
    public static void main(String[] args)
    {System.out.println("\nTesting swap:");
    Employee a = new Employee("Alice", 70000);
    Employee b = new Employee("Bob", 60000);
    System.out.println("Before: a=" + a.getName());
    System.out.println("Before: b=" + b.getName());
    swap(a, b);
    //Employee temp = a;
    //a= b;
    //b = temp;
    System.out.println("After: a=" + a.getName());
    System.out.println("After: b=" + b.getName());
    }
    public static void swap(Employee x, Employee y)
    {
    Employee temp = new Employee();
    //x = y;
    //y = temp;
        temp.setName(x.getName());
        temp.setSalary(x.getSalary());
        x.setName(y.getName());
        x.setSalary(y.getSalary());
        y.setName(temp.getName());
        y.setSalary(temp.getSalary());
        
    System.out.println("End of method: x=" + x.getName());
    System.out.println("End of method: y=" + y.getName());
    }
    }class Employee
    {public Employee()
        {
            name=null;
            salary=0.0;
        }
    public Employee(String n, double s)
    {
    name = n;
    salary = s;
    }public String getName()
    {
    return name;
    }public double getSalary()
    {
    return salary;
    }public void setName(String aName)
    {
        name=aName;
    }public void setSalary(double aSalary)
    {
        salary=aSalary;
    }private String name;
    private double salary;
    }