Discuss / Java / 两次都是bob

两次都是bob

Topic source

honnnnnnnnnng

#1 Created at ... [Delete] [Delete and Lock User]

第一次实参传入了方法的形参里,

第二次实参未传入方法的形参里。

honnnnnnnnnng

#2 Created at ... [Delete] [Delete and Lock User]

p.setName(bob); // 传入bob变量

honnnnnnnnnng

#3 Created at ... [Delete] [Delete and Lock User]

重新学习了一遍,大有收获,理解加深。

SunnyTang_

#4 Created at ... [Delete] [Delete and Lock User]

我也是这样理解的,实例化person之后,第一次调用setAge,把15传递过去。然后打印。接着只是修改了n的值,并没有再次调用setAge修改person内部的age值。当然两次都是15。这和参数绑定有什么关系???我搞不大明白。

因为String是不可变的(看原码会发现String类是被final修饰的),所以给bob赋新值时实际上是给了bob变量新的指向(相当于每次赋值都是new String()),而实例里的 name 变量还是之前的指向,所以当person.getName() 时return的是之前的值。

将 perso的string类型改成StringBuilder。

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        StringBuilder bob = new StringBuilder("Bob");
        p.setName(bob); // 传入bob变量
        System.out.println(p.getName()); // "Bob"
        bob.append("改变"); //
        System.out.println(p.getName()); // "bob改变"
    }
}

class Person {
    private StringBuilder name;

    public StringBuilder getName() {
        return this.name;
    }

    public void setName(StringBuilder name) {
        this.name = name;
    }
}


  • 1

Reply