zoukankan      html  css  js  c++  java
  • javase参数传递机制(值传递)

    java中所有的参数传递都是值传递,也就是说传递的是值的副本,而不是原件,因此,副本的改变不会影响原件。

    1、值传递的类型

    (1)基本数据类型参数的传递

    传递的是值的副本,副本改变不会影响原件

    (2)引用类型参数的传递

    传递的是实参的引用的副本,引用类型指的是对象的地址,因此,副本和原参数指向了同一个地址,改变副本指向地址对象的值,原参数的值也就跟着改变了。

    public class Student {
        private String name;
        private Integer age;
        public Student(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public void testPara(Student student1){
             student1.name="zhang";
        }
    
        public static void main(String args[]){
            Student student=new Student("zhai",12);
            student.testPara(student);
            System.out.println(student.name);
        }
    }

    程序运行产生的结果为zhang,因为,student对象的引用和student1对象的引用指向的是同一个地址,student1将对象的值改变后student对象也发生了改变。

    public class Student {
        private String name;
        private Integer age;
        public Student(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public void testPara(Student student1){
            student1.name="zhang";
        }
    
        public void testPara1(Student student2){
            student2=new Student("liu",11);
        }
    
        public static void main(String args[]){
            Student student=new Student("zhai",12);
            student.testPara(student);
            System.out.println(student.name);
    
            student.testPara1(student);
            System.out.println(student.name);
        }
    }
    zhang
    zhang

    第一步,student和student1对象的引用指向同一个对象:

     student1将name属性进行了修改:

     第三步,student2和student对象的引用指向同一个对象:

     由于testPara1方法内对student2对象的引用创建了新的对象,因此,student2又指向了这个新创建的对象:

     2、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    • 是值传递,Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对象的引用是永远不会改变的。
    •  值传递,如果形参的值发生改变,但是实参的值是不会改变的,因为形参只是实参的一个拷贝
    public class Alpha {
        public static void change(int a,int b){
            int temp;
            temp=a;
            a=b;
            b=temp;
        }
        public static void main(String[] args) {
            int num1=1,num2=9;
            change(num1,num2);
            System.out.println(num1+"   "+num2);
        }
    }
    • 引用传递:在内存中没有产生实参的副本,直接对实参进行操作。数据量较大时可以节省空间。

    不能理解为参数是什么类型就是什么传递

  • 相关阅读:
    Android 沉浸式状态栏的三种实现方式
    大数据量高并发访问的数据库优化方法(一)
    Spring Boot实战:集成Swagger2
    JVM学习之GC常用算法
    java并发面试题
    Java面试处理高并发
    jedis操作redis的几种常见方式总结
    彻底理解数据库事物
    Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
    HashMap的工作原理
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12532784.html
Copyright © 2011-2022 走看看