日期:2014-05-20  浏览次数:20597 次

Java是如何传参数的?怎么交换变量?
书上说的乱糟糟的,一会按值传,一会按引用传,最后不知道按啥传了。
下面试验了一下交换变量,但是没效果啊,还是输出1和2,变量没换成

Java code
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");
    }
}


------解决方案--------------------
像基本类型(int,float,double,char,byte...)这些是按值传递,传递的是值的副本
像数组,类这样的传值是按引用传递,传递的是地址
以上纯属个人观点,坐等大侠指正
------解决方案--------------------
学过C++的都知道。(int,float,double,char,byte...)这些变量传过来的都是值。。在C++中(int @,float @,double @,char @,byte @...)这些都是引用传递的是地址。形参和实参同地址,不同名。
以上纯属个人观点,坐等大侠指正
------解决方案--------------------
按值传递,引用变量内存会创建一个副本,我们通过这个副本来操作源对象。直接把该副本改变引用对象,对原来数据没有任何影响。所以没交换。
------解决方案--------------------
当把参数传进去时,参数本身就不会被修改了,但如果这个参数是对象,对象中的东西可以修改
个人观点哈,望指正
------解决方案--------------------
这个问题怎么老是有人问呢?哎,java里没什么传引用,传值,简单的问题搞的那么复杂。关键要知道怎么存在的内存的,举个例子你就明白了。
Java code

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;
    }
    
    
}

------解决方案--------------------
探讨

当把参数传进去时,参数本身就不会被修改了,但如果这个参数是对象,对象中的东西可以修改
个人观点哈,望指正