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
引用传递(传地址):就是方法调用时,实际参数的引用(即地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行时对形式参数的操作实际上就是对实际参数的操作(地址操作),这样方法执行中形式参数值的改变将会影响实际参数的值。
值传递——基本数据类型作为参数(如: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
相关文章推荐
- java 值传递及地址传递(引用传递)
- Java 值传递和引用传递详解及实例代码
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- 【java】值传递和引用传递理解
- java是值传递还是引用传递
- java中参数传递详解:call by value(按值传递)和 call by reference(按引用传递)
- Java函数参数的值传递和引用传递
- Java语言中的值传递与引用传递
- Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递
- JAVA参数没有引用传递,只有值传递
- 值传递和引用传递,java到底按什么传递的
- Java中只有值传递,没有引用传递
- java中函数是值传递还是引用传递?
- java中函数是值传递还是引用传递?
- java到底是值传递还是引用传递?
- JAVA是按值传递还是按引用传递的,试试就知道
- Java中的值传递与引用传递
- Java 到底是值传递还是引用传递?
- Java中被面试官套路过的值传递和引用传递
- java关于值传递和引用传递