Swap血案

关于 按值传递 和 引用传递 😢

早在C/C++学习交换函数Swap()的时候 我就记得很清楚 老师上课的时候带着&交换的

关于那片C++的Blog:交换函数Swap

关于Java的Blog:Java中的值传递

另外一篇Blog:Java中的值传递和引用传递

今天是2022年的5月 在今天伞兵乔问我Java的Swap()问题时 我发现我又把这个玩意整不明白了

特此复习

在 C/C++里 有指针

而在Java里只有 基本类型 和 引用类型 所以一定要把引用类型整明白!

先整错误的案例来瞧瞧 🙅:

调用交换方法:

a.swap(m,n);

错误的交换方法:

class Swap{
    int m;
    int n;
    int temp;
    public void swap(int m,int n) {
        temp=m;
        m=n;
        n=temp;
    }

两个传递:

值传递 / 引用传递
值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。

引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。

成员方法:

今天在Java成员方法时重温到了:传入方法的参数,如果是基本类型,会在调用方法的时候,对参数的值进行复制,方法中的参数变量,不是我们传入的变量本身!

Java 程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,即,方法不能修改传递给它的任何参数变量的内容!

引用回顾 📖:

new标识符只能和类的构造方法进行运算,运算的结果最后是一个十六进制的数字,这个数叫做对象的引用

Student a = new Student();

当计算出引用后,也就是new Student()表达式已经有值之后,对象才诞生✅

当把new Student()的值赋值给一个对象( Student声明的对象变量 ) ,这个对象就拥有了被new运算符分配了内存的成员变量,即new运算符为该对象分配了变量

一点点小拓展啦 🤏:

栈(stack)和 堆(heap)是Java用来在RAM中存放数据的地方。Java自动管理栈和堆,程序员不能直接的设置栈和堆。

  • 对象的引用存放在栈中:

  • 栈的优势时存取速度比堆要快,缺点是存放在栈中的数据大小和生存期必须是确定的;缺乏灵活性

  • 对象的实体(分配给对象的变量)存放在堆中:

  • 堆的优势是可以动态地分配内存大小,生存期也不事先告诉编译器,Java的垃圾收集系统会自动收走不使用的数据;缺点是由于要在运行时动态分配内存,存取速度较慢

posted on 2022-05-12 23:57  AcherLoveCode  阅读(30)  评论(0编辑  收藏  举报

导航