Java函数形参"传值"和"传引用"的区别

来源:互联网 发布:js模块化是什么意思 编辑:程序博客网 时间:2024/06/05 16:43
public class TestFun2 {public static void changeStr(String str){str="hello"; //形参指向字符串 “hello”}public static void main(String[] args) {String s="1" ;changeStr(s);System.out.println("s="+s); //实参s引用没变,值也不变}}

Java函数形参"传值"和"传引用"的区别:
(一)基本数据类型:传值,方法不会改变实参的值。
public class TestFun {public static void changeInt(int i){i=5;}public static void main(String[] args) {int a=0 ;changeInt(a);System.out.println("a="+a);}}


程序执行结果:a=0

(二)对象类型参数:传引用,<"方法体内改变形参引用,不会改变实参的引用">,<"但有可能改变实参对象的属性值">
(1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

程序执行结果:s=1
(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。
public class TestFun2 {public static void changePersonAge(Person person){person.age += 10; //形参指向Person对象的值改变}public static void main(String[] args) {Person person = new Person(20);changePersonAge(person);System.out.println("person.age="+person.age); //实参s引用没变,但引用对象的值改变了}}class Person {public int age;public Person(int age) {this.age = age;}}


程序执行结果:person.age=30;