今天看到一张帖子,楼主问Java如何在方法中修改传入参数的值。
之前也经常被这个问题困扰,C++可以用指针或引用来实现,但是Java怎么办?
先来举个例子吧,比如int i = 5,你把i做参数。java复制一个它的值过去,所以在方法里改的只是复制品。
再如s = "want to change",这句其实只做了一件事,就是把s指向了新的String对象"want to change",而它原来的值却没有改变,所以方法返回后,s的值还是原来的值。
那么到底什么时候才能通过传入的参数改变对象自己呢?这样想想,原始s跟复制的s它们有什么共同点呢?那就是它们都指向原来的对象。所以只能通过这个对象自己提供的方法来改变它,其实就是封装的概念。
下面看一段代码:
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
Obj ob = new Obj(2);
changeA(ob);
System.out.println(ob.a);
}
static public void changeA(Obj obj){
int e = 5;
obj.setA(e);//改变a值
obj = new Obj(3);// obj指向新对象
obj.setA(6);//新对象改变a值,但不影响原来的对象,原对象的值还是a
}
}
class Obj{
int a;
public Obj(int a){
this.a = a;
}
public void setA(int a){
this.a = a;
}
}