Java:对象引用和重新分配

从不耐烦的Core Java中:


变量只能保存对对象的引用...


我像这样尝试,它似乎可以工作:


public class Person{

    public String m_name;

    public int m_age;


    Person (final String name, final int age){

        m_name = name;

        m_age = age;

    }


    public static void main(String[] args){

        Person a = new Person("John", 45);

        Person b = a;


        System.out.printf("Person a is %s, aged %d\n", a.m_name, a.m_age);

        System.out.printf("Person b is %s, aged %d\n", b.m_name, b.m_age);


        a.m_name = "Bob";


        System.out.printf("Person a is now %s, aged %d\n", a.m_name, a.m_age);

        System.out.printf("Person b is now %s, aged %d\n", b.m_name, b.m_age);

    }

}

/*Output:

Person a is John, aged 45

Person b is John, aged 45

Person a is now Bob, aged 45

Person b is now Bob, aged 45*/

但是,它似乎不仅仅适用于String对象或基本类型(尽管,从类实例的意义上讲,后者并不是对象):


String aS = "John";

String bS = aS;

aS = "Bob";

System.out.println(aS + '\n' + bS);


/*Output:

Bob

John*/


int a = 10;

int b = a; 

a = 5; 

System.out.printf("a = %d, b = %d", a, b);


/*Output:

a = 5, b = 10*/

我想知道为什么要这样二分法吗?谢谢


ps:Person类的属性是公共的,以避免此简单示例的更改器,访问器


守候你守候我
浏览 255回答 1
1回答

跃然一笑

您不是在重新分配“ a”a.m_name = "Bob";尝试这样做a = new Person("Bob", 20);那么您将获得与您列出的字符串示例相似的行为。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java