碰到了一个群内求助关于引用传值的问题.
这里把容易混淆的赋值和类传值问题进行详细说明
引用修改
@Test
public void testEquals() {
Boolean b = new Boolean(false);
change(b);
System.out.println(b);
}
private void change(Boolean b) {
b = !b;
}
关于这个例子的答案,熟练java的你一定知道结果是false
.
那么这是为什么呢,内存的布局是怎样的呢?
错误理解
实际上
疑问解答
为什么不是修改栈的指向?
因为不是同一个栈地址,按照 黑色->绿色->红色 的顺序去看
引用属性修改
@Test
public void testClass() {
Student student = new Student();
student.name = "name";
changeClassAttr(student);
System.out.println(student.name);
}
class Student{
String name;
}
private void changeClassAttr(Student stu) {
stu.name = "changeAttr";
}
混淆点
根据引用修改
的理论,那么现在是不是就已经知道这里的答案了呢?
@Test
public void testClass() {
Student student = new Student();
student.name = "name";
changeClass(student);
System.out.println(student.name);
}
class Student{
String name;
}
private void changeClass(Student stu) {
stu = new Student();
stu.name = "changeClass";
}