【问题标题】:assign instance variable to a static variable将实例变量分配给静态变量
【发布时间】:2013-02-08 17:32:49
【问题描述】:

我有这样的事情:

public class Test {

    public static MyObject o4All = null;

    public MyObject o4This = null;

    public void initialize() {

        // create an instance of MyObject by constructor
        this.o4This = new MyObject(/* ... */);

        // this works, but I am wondering
        // how o4All is internally created (call by value/reference?)
        Test.o4All = this.o4This;

    }
}

我知道,我应该只通过静态方法分配或更改静态变量。但根据 java-docs (http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html),我可以使用对象引用。

类方法不能访问实例变量或实例方法 直接——它们必须使用对象引用。

如果我更改 o4This 的属性会怎样? o4All的属性也会间接改变吗?

【问题讨论】:

  • 您不会将 variable 分配给变量,而是将对象引用分配给变量。这是一个很大的区别,理解这一点将帮助您了解程序的行为和 Rohit Jain 的建议。

标签: java static


【解决方案1】:

如果我更改 o4This 的属性会怎样? o4All的财产也会吗 间接改变?

是的,它将被更改。因为现在,o4Allo4This 都指的是同一个实例。您通过以下作业完成了这项工作:-

Test.o4All = this.o4This;

在上面的赋值中,您并没有创建o4This 引用的实例的副本,而是复制o4All 引用中o4This 的值。现在,由于o4This 值是对某些instance 的引用。所以,o4All 现在引用了与o4This 相同的实例。因此,您使用引用对 instance 所做的任何更改也将反映在另一个引用中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2012-11-16
    • 2021-06-18
    相关资源
    最近更新 更多