当前位置: 代码迷 >> J2SE >> Java是怎么传参数的?如何交换变量
  详细解决方案

Java是怎么传参数的?如何交换变量

热度:62   发布时间:2016-04-24 00:21:49.0
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;    }        }
------解决方案--------------------
探讨

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