Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:对象引用和重新分配_Java - Fatal编程技术网

Java:对象引用和重新分配

Java:对象引用和重新分配,java,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[]

来自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*/
但是,它似乎不仅仅适用于字符串对象或基元类型(尽管后者不属于类实例意义上的对象):

我想知道为什么会有这种二分法?谢谢

ps:Person类属性公共以避免变异,这个简单示例的访问器

您没有重新分配“a”

试着这样做

a = new Person("Bob", 20);

然后您将看到与您列出的字符串示例类似的行为。

您看不到
a.something=somethingelse
a=somethingelse?你能解释一下预期的行为吗?@Erwin Bolwidt:这就是问题所在-如果a是用户定义类的实例,它将具有。但是如果a只是字符串实例,则没有其他属性。我认为gagan singh下面的回复有点暗示了这一点String没有什么特别之处,它只是没有任何可以分配的字段(因为它们是
private
)-您可以轻松创建一个类似
String
的类。原语不是引用,所以它们不属于此范围。
a.m_name = "Bob";
a = new Person("Bob", 20);