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) 编辑 收藏 举报