Java中值传递相关问题

Java中只存在值传递,不存在引用传递

1. 如果形参是基本数据类型,那么形参拷贝的是实参变量的值

2. 如果形参是引用数据类型,那么形参拷贝的是实参变量的地址。二者本质都是值

  • 如果形参是 String 类型,像下面这种情况,由于 String 的不可变性,实参 str 始终都是“tarena”这个值
public class Example{
    String str=new String("tarena");
    char[]ch={'a','b','c'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
   //引用类型变量,传递的是地址,属于引用传递。
        str="test ok";
        ch[0]='g';
    }
}
  • 形参是引用数据类型,而在该方法中两个引用发生了交换。那么是不会影响实参的,因为形参只是实参地址值的一个拷贝,不会影响实参
public class Person {
    private String name;
   // 省略构造函数、Getter&Setter方法
}

public static void main(String[] args) {
    Person xiaoZhang = new Person("小张");
    Person xiaoLi = new Person("小李");
    swap(xiaoZhang, xiaoLi);
    System.out.println("xiaoZhang:" + xiaoZhang.getName());
    System.out.println("xiaoLi:" + xiaoLi.getName());
}

public static void swap(Person person1, Person person2) {
    Person temp = person1;
    person1 = person2;
    person2 = temp;
    System.out.println("person1:" + person1.getName());
    System.out.println("person2:" + person2.getName());
}
posted @ 2023-03-11 18:11  pzistart  阅读(15)  评论(0编辑  收藏  举报