书上说的乱糟糟的,一会按值传,一会按引用传,最后不知道按啥传了。
下面试验了一下交换变量,但是没效果啊,还是输出1和2,变量没换成import javax.swing.*;
import java.util.*;
import java.math.*;
import java.util.Date;
//package java.util.*;public class CloneTest
{
public static void main(String[] args)
{
Employee e1 = new Employee();
Employee e2 = new Employee();
e1.age = 1;
e2.age = 2;
SWAP.swap(e1, e2);

System.out.println(e1.age);
System.out.println(e2.age);

}
}
class SWAP
{
public static void swap(Employee a1, Employee a2)
{
Employee tmp;
tmp = a1;
a1 = a2;
a2 = tmp;
}
}
class Employee
{
public int age;
public Employee()
{
// System.out.println("Employee::Employee()");
}
public static void main(String[]args)
{
// System.out.println("Employee::main");
}
}

解决方案 »

  1.   

    像基本类型(int,float,double,char,byte...)这些是按值传递,传递的是值的副本
    像数组,类这样的传值是按引用传递,传递的是地址
    以上纯属个人观点,坐等大侠指正
      

  2.   

    学过C++的都知道。(int,float,double,char,byte...)这些变量传过来的都是值。。在C++中(int @,float @,double @,char @,byte @...)这些都是引用传递的是地址。形参和实参同地址,不同名。
    以上纯属个人观点,坐等大侠指正
      

  3.   

    这个问题怎么老是有人问呢?哎,java里没什么传引用,传值,简单的问题搞的那么复杂。关键要知道怎么存在的内存的,举个例子你就明白了。package test;public class Test1 { /**
     *@Description:
     *@author:zhangjp
     *@Parameter:
     *@time:2012 Jul 30, 2012 8:47:12 AM
     */
    public static void main(String[] args) {

    int n = 20;
    User u = new User(18,"zhangsan");
    System.out.println(u);
    change(u, n);
    System.out.println(u);
    System.out.println(n);

    }
    public static void change(User u,int i){
    i = 25;
    u.setId(25);
    }}package test;public class User {
    private int id;
    private String name;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public User(int id, String name) {
    super();
    this.id = id;
    this.name = name;
    }
    @Override
    public String toString() {
    return "u.id="+id+" "+"u.name="+" "+name;
    }


    }
    输出:
    u.id=18 u.name= zhangsan
    u.id=25 u.name= zhangsan
    20int的值没有改变还是20
    而user的id改变了,说明了什么?  说明 change(User u,int i)的定义int的传的是值,而User传的是引用。关键在于int存在java的栈里,user对象的存储在java堆里面,实际传输的是user的引用。所以int没改变了,而user的id改变了。不知明白了没 
    个人博客 http://www.happyalaric.com
      

  4.   

    4楼说的很明白了
    楼主记住两点:
    1 对象传引用(引用即指针)
    2 原始类型传值
    你的例子里就是传的引用,所以你可以交换对象里的值,即age,但是你不能交换引用本身,因为引用本身就是作为值传进去的,这就是我们常说的java有且只有一种参数传递机制,这就是传值