值传递和引用传递
先不纠结于值传递和引用传递的概念,java中没有指针的概念,具体值传递和引用传递的准确概念可以先理解为值传递,是将实参的具体值传递给形参,引用传递是将实参的地址传递给形参,主要看在基本数据类型和引用数据类型在参数传递的区别
基本数据类型
java中基本数据类型包括:byte、short、int、long、float、double、char、boolean
java中引用数据类型:数组、字符串、接口、自定义类、基本数据类型的包装类
基本数据类型中的传递
public class Test {
public static void main(String[] args) {
int a =10;
change(a);
System.out.println(a);
}
public static void change(Integer a){
a = 100;
}
}
输出结果为 10,没有改变实参的值
在内存中图例
引用数据类型中的传递
- 引用类或者自定义类
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("aa");
change(sb);
System.out.println(sb.toString());
}
public static void change(StringBuffer sb){
sb.append("bb");
}
}
输出结果是aabb,改变了实际参数的值
- String 、包装类
public class Test {
public static void main(String[] args) {
String s = "aa";
change(s);
System.out.println(s);
}
public static void change(String s){
s = "bb";
}
}
输出结果为 aa,String 没有改变
String 类型及其他七个包装类,是一群特殊群体。当使用 String a = “hello”; 语句时,相当于执行了 String a = new String(“hello”)。然而在 Java 中每一次 new 都是一次对象的创建。
public class Test {
public static void main(String[] args) {
Integer n = 10;
change(10);
System.out.println(n);
}
public static void change(Integer s){
s = 100;
}
}
输出结果为 10,没有改变
参考资料
https://blog.csdn.net/xiaojinlai123/article/details/88678367
https://www.zhihu.com/question/31203609