我只是想通过一个类的方法,实现改变其他对象的属性,为什么每次都不成功呢。。
先把代码贴上来吧。。public class test { public static void main(String[] args)
{
obt test1=new obt();
obt test2=new obt();
obt test3=new obt();
test1.num=1;
test1.name="first";
test2.num=2;
test2.name="second";
test3.num=3;
test3.name="third";
test1.change(test2,test3);
System.out.println(test2.num);
System.out.println(test2.name);
}
}
public class obt { public int num;
public String name; public void change(obt test2,obt test3)
{
test2=test3;
}
}每次的执行结果都是
2
second
而不是
3
third
我想到过用clone(),那么obt的change()方法就是test2=(obt)test3.clone();
可是这样也不行呀。。
请问各位高手,我该怎么写?
用clone么?如果是的话该怎么用?
先把代码贴上来吧。。public class test { public static void main(String[] args)
{
obt test1=new obt();
obt test2=new obt();
obt test3=new obt();
test1.num=1;
test1.name="first";
test2.num=2;
test2.name="second";
test3.num=3;
test3.name="third";
test1.change(test2,test3);
System.out.println(test2.num);
System.out.println(test2.name);
}
}
public class obt { public int num;
public String name; public void change(obt test2,obt test3)
{
test2=test3;
}
}每次的执行结果都是
2
second
而不是
3
third
我想到过用clone(),那么obt的change()方法就是test2=(obt)test3.clone();
可是这样也不行呀。。
请问各位高手,我该怎么写?
用clone么?如果是的话该怎么用?
解决方案 »
- 找不到是那里出了错,收不到信息,可是发送成功(UDP聊天程序)
- swing如何播放本地视频?
- Socket 异常!很简单 大家帮忙找找错!
- 二位数组如何分配动态空间???
- 2个short类型的数据相加不能是short型了?
- 求救:安装了jdk,但是使用的时候提示找不到软件包Java.awt和Java.applet
- execUpdate()and execute有时什么区别
- 弹出提示框,例如vb中的msgbox(),在java中怎么做?有没有可便于查找的中文帮助?
- 怎样使调用applet的asp能得到applet里面的string值?
- 请教大家,java里的this用法,最好有例子给我!
- 关于hql的一个问题,查询方法有误,请高手指点
- smpp短信网关 的问题 没分了
public void change(obt test2,obt test3)
{
test2=test3;
}
这个方法改变的test2和你传入的对象不是同一个,他只是一个形参,你可以返回
public obt change(obt test2,obt test3)
{
test2=test3;
return test2;
}
然后在main中执行test2=test2.change(test2,test3);
public class obt { public int num;
public String name; public void change(obt test2,obt test3)
{
test2.num=test3.num;
test2.name=test.num;
}
}
public class obt { public int num;
public String name; public void change(obt test2,obt test3)
{
test2.num=test3.num;
test2.name=test3.name;
}
}
你把引用换掉了,但是你没改变它的值啊调用change方法的对象引用的test2还是原来的test2要想改变test2的值,你得调用test2.num = ???,
test2.name=test3.name;
这样就可以了
test2.num = test3.num;
test2.name = test3.name;
}
把代码写成这样:public class test { public static void main(String[] args)
{
obt test1=new obt();
obt test2=new obt();
obt test3=new obt();
test1.num=1;
test1.name="first";
test2.num=2;
test2.name="second";
test3.num=3;
test3.name="third";
test1.change(test2,test3);
System.out.println(test2.num);
System.out.println(test2.name);
}
}
public class Obt { public int num;
public String name; public void change(Obt o1, Obt o2)
{
test2=test3;
}
}变量o1只是持有了主方法中实例化的那个对象的引用,改变o1不会改变那个对象也不会改变变量test2引用的对象。其实也可以写为:public class test { public static void main(String[] args)
{
obt test2=new obt();
obt test3=new obt();
test2.num=2;
test2.name="second";
test3.num=3;
test3.name="third";
test2.change(test3);
System.out.println(test2.num);
System.out.println(test2.name);
}
}
public class Obt { public int num;
public String name; public void change(Obt o1)
{
num=o1.num;
name=o1.name;
}
}
public void change(Obt test2, Obt test3)
{
test2.num = test3.num;
test2.name = test3.name;
}
{
test2.num = test3.num;
test2.name = test3.name;
}
{
test2=test3;
}和这样的代码是肯定不可行的,因为这里实际上是将test2指向了test3,只是修改了test2的指向,而不是修改了test2原有对象的值,所以外部对象obt是一定不会受到影响的
你只能
test2.x = test3.x;
test2.y = test3.y;这样逐个属性赋值
public String name; public void change(obt test2,obt test3)
{
test2=test3;
}
}楼主,你的这段代码中的obt test2,obt test3所指代的并不是你在main方法中new出来的test2和test3,而是在内存中新建了两个指向test2和test3的引用对象,楼主不妨把上面的方法改一下:
public void change(obt o1,obt o2)
{
o1=o2;
}你在方法中所做的只是使内存中引用对象o1的引用指向了o2的引用,体现在你程序中便是使得o1指向了test3,但是这个过程中test2依然在内存中存在没有改变,test2所指向的对象也没有改变,所以会出现楼主所提出的结果。若想通过参数来改变对象,楼上已经提出了很好的方法:
1.返回引用对象,就是一楼所提出的方法。
public obt change(obt test2,obt test3)
{
test2=test3;
return test2;
}
不过在main中的话test1.change(test2,test3);这条语句得改成test2=test1.change(test2,test3);2.在类中改变对象的属性值,就是如同3楼的做法