最近复习了java的基础 发现了很多模棱两可的问题 特此记录
首先复习java的参数传递机制
1:基本类型或基本类型的包装类、String是值传递,引用类型是引用传递。
首先我们来看一下图文解析,要明白java的参数传递,首先我们要懂java的值存储的位置
java数据存储在栈区、堆区、常量池、(非人为可控,不做介绍)寄存器、非RAM存储区
对于值类型参数
java参数传递是传递参数的复制
而对于引用类型java传递的是对象的引用,对象的引用指向了堆区的对象实例,当我们通过引用调用堆区的对象,改变他的值时,指向该对象的所有引用都发生了变化
栈区:存储局部变量 对象的引用(每个线程初始化 都会建立一个栈区)
堆区:存储被用于的对象(唯一)
常量池:存储常量、String类型等(唯一)
先写一个最简单的例子
public static void main(args [])
{
String s="1232";
change(s);
System.out.print(s); //s输出1232
}
public static void change(String s)
{
s=s+"123";
System.out.print(s);// s输出1232123
}
我们考虑java的参数传递 首先要考虑被传递参数存储的位置!!!
String是字符串类型 存储在常量池中,在change方法给s重新赋值时,实际上
主函数的s依旧指向"1232",而change()方法中的s重新复制,会生成一个新的字符串"1232123" 并把change()中的s指向它。