日期:2014-05-20 浏览次数:20805 次
public class User
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
public class test
{
private static String s;
public void set(User u){
User u1 = new User();
u1.setName("32");
[color=#FF0000]u = u1;[/color]
}
public static void main(String[] args)
{
User u =new User();
test t = new test();
t.set(u);
System.out.println(u.getName());
}
}
public void set(User u){
User u1 = new User();
u1.setName("32");
u = u1;
}
------解决方案--------------------
就像你说的,是把外面的User对象引用传给set 方法的User对象了。二者指向一个地址,但二者还是二个不同对象。
所以在set方法中,u = u1 只影响方法内的对象,main方法中的还是指向原来的地址。所以其name值还是空。
至于如果执行u.setName("32");因为set方法内外二个对象是指向同一个地址,所以就等于main方法中那个对象的name值改变了,所以输出32。没什么不好理解的。
------解决方案--------------------
楼主对java的参数传递不是太理解,对于对象,Java传递的是一个引用。看下面在代码上的注释吧。
public class test
{
private static String s;
public void set(User u){//接收到传过来的参数地址00000001,在函数中以一个变量u来存储这个地址
User u1 = new User();新建一个User,在内存中开辟一段空间存储,假设地址为:00000003
u1.setName("32");//给u1的name赋值,即地址为00000003的空间内的name为32
u = u1;//u=u1,此时将变量u的值改为了00000003,仅仅改变的是函数中的变量值
//若在此后执行System.out.println(u.getName());必定得到32
//函数执行完毕,没有返回值。返回到主函数执行最后一句pringln
}
public static void main(String[] args)
{
User u =new User();//新建一个User,在内存中开辟一段空间存储,假设地址为:00000001
test t = new test();//新建一个Test,在内存中开辟一段空间存储,假设地址为:00000002
t.set(u);//执行Test的set函数,此是所传参数为u的引用,即其地址00000001
System.out.println(u.getName());//此时的u的地址仍为上面创建的地址00000001 }
}