java方法传值的问题

来源:互联网 发布:知乎windows客户端 编辑:程序博客网 时间:2024/06/06 01:30

转自: http://www.cnblogs.com/yujun19880729/p/3515490.html

基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress
引用类型包括:类类型,接口类型和数组。

public class TestValTran {    public static void main(String[] args) {        TestValTran testValTran = new TestValTran();        int i = 1;         int j = 2;        testValTran.swap1(i, j);        System.out.println("i = " + i + ", j = " + j);        User user = new User(1, 2);        testValTran.swap2(user);        System.out.println("user.i = " + user.getI() + ", user.j = " + user.getJ());        User user1 = new User(1, 2);        testValTran.swap3(user1);        System.out.println("user1.i = " + user1.getI() + ", user1.j = " + user1.getJ());    }    /***     * 基本的数据类型,对应每个方法所对应的栈幁都有自己的局部变量表。也就是会自己创建一个基本数据类型的对象,不会对真实的对象产生影响     *      * @param a     * @param b     */    public void swap1(int a, int b) {        int temp = b;        b = a;        a = temp;    }    /**     * 这种方式对user不会发生变化,只是把局部变量user先传递为外部user的引用,然后又重新重新赋值为temp的引用。没有对外部user引用的真实对象进行操作。所以不会生效     *      * @param user     */    public void swap2(User user) {        User temp = new User(2, 1);        user = temp;    }    /**     * 这种传递了对象的引用之后,又获取了引用的对象,进行了修改,所以能生效     *      * @param user     */    public void swap3(User user) {        int temp = user.getJ();        user.setJ(user.getI());        user.setI(temp);    }}public class User {    int i, j;    public User(int i, int j){        this.i=i;        this.j=j;    }    public int getI(){        return i;    }    public int getJ(){        return j;    }    public void setI(int i) {        this.i = i;    }    public void setJ(int j) {        this.j = j;    }}

运行结果:
i = 1, j = 2
user.i = 1, user.j = 2
user1.i = 2, user1.j = 1

原创粉丝点击