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

桃扇骨 2022-06-04 04:05 296阅读 0赞
  1. public class TestFun2 {
  2. public static void changeStr(String str){
  3. str="hello"; //形参指向字符串 “hello”
  4. }
  5. public static void main(String[] args) {
  6. String s="1" ;
  7. changeStr(s);
  8. System.out.println("s="+s); //实参s引用没变,值也不变
  9. }
  10. }

Java函数形参”传值”和”传引用”的区别:
(一)基本数据类型:传值,方法不会改变实参的值。

  1. public class TestFun {
  2. public static void changeInt(int i){
  3. i=5;
  4. }
  5. public static void main(String[] args) {
  6. int a=0 ;
  7. changeInt(a);
  8. System.out.println("a="+a);
  9. }
  10. }

程序执行结果:a=0

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

程序执行结果:s=1
(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

  1. public class TestFun2 {
  2. public static void changePersonAge(Person person){
  3. person.age += 10; //形参指向Person对象的值改变
  4. }
  5. public static void main(String[] args) {
  6. Person person = new Person(20);
  7. changePersonAge(person);
  8. System.out.println("person.age="+person.age); //实参s引用没变,但引用对象的值改变了
  9. }
  10. }
  11. class Person {
  12. public int age;
  13. public Person(int age) {
  14. this.age = age;
  15. }
  16. }

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

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ | 引用,如何

    前言 > 在定义函数时函数括号中的变量名成为`形式参数`,简称`形参或虚拟参数`;在主调函数中调用一个函数时,该函数括号中的参数名称为`实际参数`,简称实参,实参可以是`

    相关 golang引用

    golang传值和传引用 这里不会解释关于指针的情况,如果读者对C语言或者C++的指针比较了解,那么就能更好地理解本文。 定义 对于代码 modify(a);