• 引用传递和值传递


    (1)基本数据类型传值,对形参的修改不会影响实参;
    (2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;

    值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

    引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

      所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
      所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
    值传递,例如:
    class TestT1 { 
             public static void main(String[] args) { 
                       int i = 5; 
                       int j = 6; 
                       System.out.println("before exchange i = "+i);//交换前
                       exchange(i, j); 
                       System.out.println("after exchange i = "+i);//交换后
             }
    public static void exchange(int a,int b) { 
             int k;
             k = a;a = b; b = k; 
             } 

    程序的结果是5.
             这说明,原始数据类型是按值传递的,这个按值传递也是指的是进行赋值时的行为。 
             Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用。引用传递,例如:
    class TestT2{ 
             public static void main(String[] args) { 
                       String s= new String("good"); 
                       String s2=s; 
                       s2.append(" afternoon."); 
                       System.out.println(s); 
             } 

             对象s和s2指向的是内存中的同一个地址因此指向的是同一个对象。 
    这里的意思是进行对象赋值操作是传递的是对象的引用,因此对象是按引用传递的。 
    程序运行的输出是: 
             good afternoon. 
    这说明s2和s是同一个对象。
    总结: 
           大家都知道,在JAVA中变量有以下两种:
             基本类型变量,包括boolean、byte、char、short、int、long、float、double。
             引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。
             对于基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
             而对象作为参数,如果在方法中把对象作为参数,方法调用时,参数传递的是对象的引用,即在方法调用时,实际参数把对对象的引用传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象,方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。

  • 相关阅读:
    mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
    如果感觉不好,最后一面你需要更努力表达你的优势。最后一面打动面试官的可能往往是你的真诚和热情
    你的最终目的不是要进入该公司,而是要进入该公司你最想去的部门乃至项目组
    如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推
    Qt中嵌入Directx11(有句柄就可以)
    2015腾讯暑期实习武汉站面试经历(大学里的小朋友有这样的技术水平,只能说他规划的好、觉醒的早)
    NET Core开发-获取所有注入(DI)服务
    jQuery.data的是jQuery的数据缓存系统
    理解数字图像处理中的卷积
    Obstack是C标准库里面对内存管理的GNU扩展
  • 原文地址:https://www.cnblogs.com/dldrjyy13102/p/7543093.html
Copyright © 2020-2023  润新知