java 声明两个对象,指向一个引用,然后一个对象改变属性,另一个对象的属性也变了,直接上代码

publicclassTest{privateStringid="";publicStringgetId(){returnid;}publicvoidsetId(Stri... public class Test {
private String id="";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name="";
public static void main(String[] args) {
Test test=new Test();
test.setId("1");
test.setName("cc");
changeId(test);
System.out.println(test.getId());
}
public static void changeId(Test test)
{
Test tt=new Test();
tt=test;
tt.setId("2");
System.out.println(tt.getId());
}
}

/**我要改变一个对象的值,另一个对象不改变值。
求高手指点
展开
 我来答
darkads2012
2012-12-26 · TA获得超过577个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:319万
展开全部
Test tt=new Test();
tt=test;
tt.setId("2");
注意Test tt这里的tt只是一个对象的引用,就好像C中的指针一样
tt=test;这句话是把test引用指向的对象的地址交给tt,即tt跟test指向了同一个对象
要达到你的目的,可以采用以下方法:
第一,Test tt=new Test();后把test的每个属性的值赋给tt
第二,就是克隆了,clone函数,原理跟上面一样,不过更复杂,涉及到深复制和浅复制问题
追问
第一个办法肯定不是好的办法,test的属性有100多个,这样一个一个只是肯定不是最好的。第二种方法的话,我就需要改框架了。
追答
那就实现Cloneable接口,调用clone方法
屏205211
2012-12-26 · TA获得超过943个赞
知道小有建树答主
回答量:371
采纳率:100%
帮助的人:222万
展开全部
你这个当然不行了,虽然test和tt是两个对象,但是它们指向了同一块内存地址,只要有一个对象改变了该块内存地址的内容,另外一个对象再次引用的时候当然值就会变了。不知道你这部分代码想要满足什么需求。。。
追问
test的属性很多,如果把test的属性一个一个设置给tt肯定不是对好的办法,现在我想获取test的属性给tt,tt在test基础上改变其他属性的值。然后test作为一条记录插入数据库,tt作为一条记录插入数据,需要这样的目的
追答
以前好像记得有个深克隆还有个浅克隆,能解决你的问题,但是我很长时间没有用了,不记得怎么用了,搜搜看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
taokai20120421
2012-12-26
知道答主
回答量:35
采纳率:0%
帮助的人:29.9万
展开全部
//浅克隆方式
public class Test implements Cloneable{
private static final long serialVersionUID = 2213587695985595126L;
private String id = "";
private String name = "";

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void changeId(Test test) {
Test tt = null;
try {
tt = (Test) test.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
tt.setId("2");
System.out.println(tt.getId());
}

public static void main(String[] args) {
Test test = new Test();
test.setId("1");
test.setName("cc");
changeId(test);
System.out.println(test.getId());
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
半夏_夜
2012-12-26
知道答主
回答量:9
采纳率:0%
帮助的人:4万
展开全部
把changeId方法改为:
public static void changeId(Test test)
{
Test tt=new Test();
tt.setName(test.getName());
tt.setId("2");
System.out.println(tt.getId());
}
追问
额,test属性有100多个,一个一个设置?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友57c0b46
2012-12-26 · 超过27用户采纳过TA的回答
知道答主
回答量:121
采纳率:0%
帮助的人:85.5万
展开全部
Object.clone()
更多追问追答
追问
请问还有其他办法么?
追答
在我的知识范畴内没有了。你也可以自己写一个方法复制某个对象的属性和方法,如果是两个变量指向同一个对象实例,你的要求根本不可能达到
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式