Java中的每个变量都是一个 引用 。所以当你这样做
SomeClass s2 = s1;
您只是指向
s2与指向相同的对象
s1。您实际上是在将引用s1的值(指向的一个实例
SomeClass)分配给s2。
如果您修改
s1,
s2也会被修改(因为它指向同一对象)。
基本类型有一个例外:
int, double, float, boolean, char, byte, short,long。它们按值存储。因此,在使用时
=,您仅分配值,但它们不能指向同一对象(因为它们不是引用)。这意味着
int b = a;
仅将的值设置
b为的值
a。 如果您更改
a,
b则不会更改。
归根结底,一切都是按值分配,它只是引用的值,而不是对象的值(如上所述的原始类型除外)。
因此,在您的情况下,如果要复制
s1,可以这样进行:
SomeClass s1 = new SomeClass("first");SomeClass s2 = new SomeClass(s1.getText());
或者,您可以向其添加一个复制构造函数,
SomeClass该复制构造函数将实例作为参数并将其复制到自己的实例中。
class SomeClass { private String text; // all your fields and methods go here public SomeClass(SomeClass copyInstance) { this.text = new String(copyInstance.text); }}
这样,您可以轻松复制对象:
SomeClass s2 = new SomeClass(s1);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)