我有一个类的静态变量,帮助在Java
class MyClass {
private int val;
public static final MyClass myObject = new MyClass(1);
MyClass(int a){
val = a;
}
public int getVal(){
return val;
}
public MyClass func1(){
MyClass temp = myObject;
temp.val = 2;
return temp;
}
public static void main(String [] args){
MyClass x = new MyClass(4);
System.out.println(myObject.getVal());
x.func1();
System.out.println(myObject.getVal());
}
}
它打印:
1
2
我期待它打印:
1
1
似乎有成为根本的误解。我期待myObject
是一个final static
值不能改变,当我做MyClass temp = myObject
时,我创建了一个新的对象temp
类型MyClass
,并将myObject
的值分配给这个新创建的对象。如果我错了,请纠正我。看来,没有新的对象创建和temp
只是指向原来myObject
编辑:感谢您的答案!我现在明白=
操作符不会复制对象,它只是复制引用。我需要的是复制myObject
并将其存储在temp
中。什么是实现这一目标的最佳方式?编辑2:另一个奇怪的行为或Java的功能?
我修改了代码略微
class MyClass {
private Integer val;
public static final MyClass myObject = new MyClass(1);
MyClass(int a){
val = a;
}
public int getVal(){
return val;
}
public MyClass func1(){
MyClass temp = new MyClass(33);
temp.val = myObject.val;
temp.val = 2;
return temp;
}
public static void main(String [] args){
MyClass x = new MyClass(4);
System.out.println(myObject.getVal());
MyClass y = x.func1();
System.out.println(x.getVal());
System.out.println(y.getVal());
System.out.println(myObject.getVal());
}
}
输出是
1
4
2
1
因此,当我使用new MyClass(33)
创建temp
然后设置temp.val = 2
,它实际上使val的副本。换句话说,temp.val
不指向myObject.val
。这是为什么?
我认为你正在尝试实现Singleton模式http://en.wikipedia.org/wiki/Singleton_pattern#Java 顺便说一句,你的问题已经答复在下面的多个答案。 – 2010-06-29 20:27:18