public class TestString {
public static void operater(StringBuffer m,StringBuffer n)//6.在栈内存中开辟m和n 把0FA23,OFF33赋值给m,n
{
m.append(n);//7 把栈内存中句柄m指向的堆内存中的0FA23的值进行append运算 由于0FA23值改变了所以主函数的变量a的值也改变了
n = m;//8 把栈内存中的m句柄指向的堆内存首地址OFA23赋值给栈内存中的句柄n 栈内存主函数区y句柄指向的堆内存0FF33的值并没变
} //变的只是栈内存operater方法区n句柄的值
public static void operater(String m,String n)//10 在栈内存中开辟m指向栈内存中的"A" 在栈内存中开辟n指向栈内存中的"B"
{
m +=n;//11 把栈内存中的"AB"指向给栈内存的m 但是并不影响栈内存的"A".因为栈内存主函数区的x还在指向栈内存的"A"所以并不会释放
n = m;//12 把栈内存的M指向的值"AB"赋值给栈内存n
}
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A"); //1. 在栈内存开辟空间存储句柄a指向new StringBuffer("A");在堆内存开辟的首地址如0FA23
StringBuffer b = new StringBuffer("B");//2. 在栈内存开辟空间存储句柄b指向new StringBuffer("B");在堆内存开辟的首地址如0FF33
String x = "A"; //3.在栈内存中开辟空间存放x x的值为栈内存的"A"
String y = "B"; //4.在栈内存中开辟空间存放y y的值为栈内存的"B"
operater(a,b); //5.执行operater方法 把栈内存中a和b句柄的值传递给该方法
operater(x,y); //9 执行operater方法 把栈内存中x指向的栈内存"A"和y指向的"B"传递给该方法
System.out.println("a="+a+" b="+b);//13因为堆内存中的OFA23的值改变成了"AB" 堆内存OFF33的值并没有改变 所以地一行是 "AB" "B"
System.out.println("x="+x+" y="+y);//14应为栈内存x,y指向的栈内存的"A","B"还在 所以打印的是"A" "B"
}
} |