如何使对象引用相同的东西?

时间:2014-03-10 06:14:54

标签: java

public class Number {
    private int j;
    public Number(){
        j = 3;
    }

    public Number(int m){
        j = m;
    }

    public void SetNum(int n){
        j = n;
    }

    public int GetNum(){
        return j;
        }

    }

///(不同的文件,同一目录)

    public class User {
        private Number jim;

        public User(){
                this.jim = new Number();
            }

            public static void main(String []args){
                User keith = new User();
                User justin = new User();
                ??????????????????????????
            }
     }

我想要keith.jim = justin.jimjustin.jim = keith.jim。如果我keith.jim.SetNum(34),则keithjustin's jim.j都将为34。怎么做?这个想法将在更大的代码中实现。

此外,user.javaNumber。java必须存在。上下文不能改变,我可以添加新方法,但我不能改变Number中的上下文(E.G将j放在用户而不是Number中)。每个用户都必须有一个每个用户都引用的数字对象。

3 个答案:

答案 0 :(得分:2)

其他人建议只创建一个User对象。另一种方法是拥有两个User个对象,但对jim字段的值具有相同的引用:

User keith = new User();
User justin = new User();
justin.jim = keith.jim;

如果您有其他字段keithjustin需要不同,这将非常有用,但jim字段的值所引用的对象的任何更改都必须是两者都看到了。

这些都是有效的选项,具体取决于您的要求。

但有几点:

  • 这意味着justin.jim的原始值,因为没有意义;你可以考虑添加一个User构造函数,对该字段的初始值采用Number引用,允许你写:

    User justin = new User(keith.jim);
    
  • 像这样的共享可变状态可能变得很难理解,特别是面对多线程
  • 如评论中所述,您应该将Number课程重命名为<{1}}中的不是(或java.lang等,如果可能的话)
  • 你应该遵循你的方法的Java命名约定,使用camelCase而不是PascalCase - 我个人称之为java.utilgetValue

答案 1 :(得分:1)

试试这个

   User keith = new User();
   User justin = keith;

答案 2 :(得分:0)

   User keith = new User();
   User justin = keith;

现在两者都会引用同一个对象, keith 中的任何更改都会反映到 justin ,因为两者都指的是同一个对象。