直接操作形参和下面这种操作有区别吗?

public void changPwd(User user){
User u=user;
u.setName("zs");
}

public void changPwd(User user){
user.setName("zs");
}
有区别吗?尤其是在多线程的时候

从效果上讲 应该是没有区别
因为定义的User u=user; 相当于变量u对 user的引用 所以u.setName("zs");
就相当于 user.setName("zs");
另外在多线程下 要看传入的user的具体情况了 假如是线程安全的就没有问题
假如是多个线程共享一个user可能会出现问题
单单从上面两段代码来讲 是没有区别的

毫无区别,线程看调用,方法本身没区别

你这样写完全一样的。多线程下也是一样的。

[quote]我看了几个java类的源码,他们一般用的都是上面这种写法 [/quote]
这就难以理解,因为上面写法多了临时变量的创建,属于浪费

我的理解如下
根据代码规范 形参传入来的默认都 是带final的
既如下
public void changPwd(final User user){
User u=user;
u.setName("zs");

//这里
u = new User();
}

这样做的好处是u还会在下面赋予其他的值 这样对于final的 user 是不允许的