java中到底是值传递还是引用传递

Myth丶恋晨 2022-03-18 08:26 381阅读 0赞

这个问题不用考虑太复杂,答案是值传递。
首先java中的数据类型有两种:基本类型和引用类型

基本类型的传递举个栗子:

  1. public class App
  2. {
  3. public static void main( String[] args )
  4. {
  5. Integer i = 10;
  6. changeInteger(i);
  7. System.out.println(i);
  8. }
  9. public static void changeInteger(Integer j) {
  10. j++;
  11. System.out.println(j);
  12. }
  13. }

输出:

  1. 11
  2. 10

基本类型的传递是将值拷贝一份传给方法体作为入参,这份拷贝在方法体内的任何操作都不会影响之前值得改变。所以基本类型是值传递。

引用类型:

  1. public class App
  2. {
  3. public static void main( String[] args )
  4. {
  5. Student student = new Student();
  6. student.setName("fujian");
  7. student.setClassName("class 2");
  8. changeStudent(student);
  9. System.out.println(student.toString());
  10. }
  11. public static void changeStudent(Student student) {
  12. student.setName("changed");
  13. student.setClassName("class 3");
  14. System.out.println(student.toString());
  15. }
  16. }

输出:

  1. name is changed and className is class 3
  2. name is changed and className is class 3

引用类型是内存地址的传递,将之前student引用指向的内存地址传递给方法作为入参,方法体内对入参的修改操作是对之前内存地址上的对象的操作,所以会改变之前对象的属性,引用类型还是值传递,只是传递的是内存地址。

接下来看个栗子继续讲引用传递

  1. public class App
  2. {
  3. public static void main( String[] args )
  4. {
  5. Student student = new Student();
  6. student.setName("fujian");
  7. student.setClassName("class 2");
  8. changeStudent(student);
  9. System.out.println(student.toString());
  10. }
  11. public static void changeStudent(Student student) {
  12. student = new Student();
  13. student.setName("changed");
  14. student.setClassName("class 3");
  15. System.out.println(student.toString());
  16. }
  17. }

输出:

  1. name is changed and className is class 3
  2. name is fujian and className is class 2

可以看到方法体内的一系列动作:起初将fujian这个student对象的内存地址值传递给方法体的形式参数name,然后name又指向了新的student的内存地址,所以之后的一系列操作均是操作的新的student的内存地址上的对象,不影响fujian这个对象。

总结:
java是值传递,基本类型是值拷贝的传递,引用类型是内存地址的值传递。

发表评论

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

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

相关阅读

    相关 Java传递引用传递

    值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果是传递副本,那就是值传递,否则就是引用传递。 Java对象的传递,是通过复制的方式把引用关系传递了,因为有

    相关 java传递引用传递

    在Java中一切皆对象,无论是int a;还是String a;,这两个变量a都是对象。 在传递的时候究竟是按什么方式传递的呢?其答案就是:即是按值传递也是按引用传递,但通