您的位置:首页 > 编程语言 > Java开发

Java 值传递与引用传递

2013-03-23 11:11 447 查看
值传递:就是方法调用时,实际参数把它的值传递给对应的形式参数,方法中执行形式参数值的改变不影响实际参数的值。
引用传递(传地址):就是方法调用时,实际参数的引用(即地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行时对形式参数的操作实际上就是对实际参数的操作(地址操作),这样方法执行中形式参数值的改变将会影响实际参数的值。

值传递——基本数据类型作为参数(如:int , String)

public class Test{

public static void change(int a,int b){

int temp = a;

a = b;

b = temp;

}

public static void main(String[] args){

int a = 12;

int b = 23;

System.out.println(a+","+b);

change(a,b);

System.out.println(a+","+b);

}

}

执行结果:
12,23

12,23

由此可见,在方法执行之前和之后a,b的值并没有改变。

引用传递——对象(引用地址)作为参数(如:Person)

public class Test1{

public static void main(String[] args){

Person person = new Person("刘备",100);

System.out.println("name = " + person.name + "; age = " + person.age);

person.changePerson(person,"关羽",88);

System.out.println("name = " + person.name + "; age = " + person.age);

}

}

class Person{

String name;

int age;

public Person(String name, int age){

this.name = name;

this.age = age;

}

public void changePerson(Person person, String name, int age){

person.name = name;

person.age = age;

}

}

执行结果:

name = 刘备; age = 100

name = 关羽; age = 88

由此可见:形式参数的值的改变影响了实际参数的值

综合示例:

package homework;

public class Test1 {

public static void main(String []args){

// 对象,引用传递

Person person = new Person("刘备", 100);

System.out.println("name = " + person.name + "; age = " + person.age);

person.changePerson(person, "张飞", 78);

System.out.println("name = " + person.name + "; age = " + person.age);

// String类型,值传递

String name1 = "曹操";

String name2 = "项羽";

System.out.println("name1 = " + name1 + "; name2 = " + name2);

changeString(name1, name2);

System.out.println("name1 = " + name1 + "; name2 = " + name2);

// int类型,值传递

int a = 34;

int b = 45;

System.out.println("a = " + a + "; b = " + b);

change(a, b);

System.out.println("a = " + a + "; b = " + b);

}

// String类型

public static void changeString(String name1, String name2){

String temp;

temp = name1;

name1 = name2;

name2 = temp;

}

// int类型

public static void change(int a, int b){

int temp;

temp = a;

a = b;

b = temp;

}

}

class Person{

String name;

int age;

public Person(String name, int age){

this.name = name;

this.age = age;

}

public void changePerson(Person person, String name, int age){

person.name = name;

person.age = age;

}

}

运行结果:

name = 刘备; age = 100

name = 张飞; age = 78

name1 = 曹操; name2 = 项羽

name1 = 曹操; name2 = 项羽

a = 34; b = 45

a = 34; b = 45
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: