class User{
private String userName; public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
}public class Test{
//更改user中name的方法
public static void replaceName(User u){
//1
u.setUserName("bbb"); //2
User u1 = new User();
u1.setUserName("bbb");
u=u1;
//3
User u1=u;
u1.setUserName("bbb");
}
//main函数测试
public static void main(String args[]){
User u= new User();
u.setUserName("aaa");
//调用函数更改user中的name
replaceName(u);
System.out.println(u.getUserName());
}
} //用1)代码输出"bbb"
//用2)代码输出"aaa"
//用3)代码输出"bbb"
//为什么?
解决方案 »
- javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=denis
- 为什么JFrame要声明成最终类
- 大家都谈谈 自己对程序优化的方法 集思广益。
- [求助]一个类如何编程线程安全的?
- 国内jboss有镜象么?
- List和NodeList之间的小纠葛
- 关于html代码中的applet标记
- 学了一段时间JAVA感觉越来越茫然~~~~~~~~
- JBuilder中提供了rmic的工具吗?
- 如何将scr.jar中的每一个java程序解压出来
- 求星期几的问题,帮帮忙谢谢了?????????
- 在java中,怎么将“9月23日 16:00”这样的字符串格式化成日期
public static void replaceName(User u)
这个里面的u 其实是一个新的引用,调用的时候只是让u的值等于传递进去的引用的值,其实就是指向的对象的地址。所以在方法里面改变u的引用不会影响原来的引用。
首先u是指向一块地址,我们暂且叫做A,在没有调用方法前,u指向A ,调用方后,把u传进去当参数,相当于吧u的地址复制了一份给c,把c传给方法,在方法中有一个u1赋给了c,那么现在 c指向了u1指向的地址,暂且叫B,现在来看 main方法中的u还是指向运来的A,而传进来的副本c却指向了B,这就是原委
O(∩_∩)O
http://blog.csdn.net/niuniu20008/archive/2008/09/19/2953785.aspx