前言
本文为本人准备面试前的学习文章,大致上是对Java一些重要知识点的总结归纳,如果有什么错误,请在评论区指出,大家一起进步!!!!
前置知识
形参&实参
正文
值传递&引用传递
关于Java只有值传递的论证
通过两个例子应该可以很好的理解。
一、传递基本类型参数
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
运行结果:
a = 20
b = 10
num1 = 10
num2 = 20
二、传递引用类型参数
public class Main {
public static void main(String[] args) {
User user1=new User("alice","male");
System.out.println("最初对象的地址"+user1);
pass(user1);
/**
* 如果Java中使用引用传递的话,形参存储的是实际对象的地址
* 那么在方法结束后,实参的地址会改变成方法中新创建对象的地址
* 实际上,形参存储的只是实参对象地址的拷贝的一份
*/
System.out.println("最初对象经过方法后的地址"+user1);
}
public static void pass(User user){
System.out.println("方法中形参对象的地址"+user);
User user2=new User("bob","man");
System.out.println("方法中新创建对象的地址"+user2);
/**
* 将新创建的对象的地址赋值给形参
*/
user=user2;
System.out.println("方法中形参对象改变后的地址"+user);
}
}
程序运行的结果:
最初对象的地址Java.main.User@1b6d3586
方法中形参对象的地址Java.main.User@1b6d3586
方法中新创建对象的地址Java.main.User@4554617c
方法中形参对象改变后的地址Java.main.User@4554617c
最初对象经过方法后的地址Java.main.User@1b6d3586
总结
Java 中将实参传递给方法(或函数)的方式是 值传递:
- 如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。
- 如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。