转自: 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
