方法调用后,对象状态不会改变
这个问题在这里已经有了答案:
比较这两种方法:
private static void hello(String t) {
    t = "hello " + t;
}
private static void hello(CustomStringObject o) {
    o.str = "hello " + o.str;
}
  在第一种情况下,你正在为t分配一个新值。  这对调用代码没有任何影响 - 您只需更改参数的值,并且所有参数都通过Java中的值传递。 
  在第二种情况下,您正在为o.str分配一个新值。  这改变了o的值所引用的对象内的字段的值。  调用者将看到该更改,因为调用者仍然具有对该对象的引用。 
简而言之:Java总是使用按值传递,但是您需要记住,对于类,变量(或者其他表达式)的值是引用,而不是对象。 你不需要使用参数传递来看到这个:
Foo foo1 = new Foo();
Foo foo2 = foo1;
foo1.someField = "changed";
System.out.println(foo2.someField) // "changed"
  这里的第二行将foo1的值复制到foo2 - 两个变量引用同一个对象,因此使用哪个变量访问它并不重要。 
  这两种方法之间有一个重要的区别:使用hello(String)你试图改变对String的引用,并且用hello(CustomObject)给定引用,你使用引用来改变对象的成员。 
  hello(String)采用对一个参考String 。  在该函数中,您试图更改该引用指向哪个对象,但是您只更改引用的按值传递副本。  所以你的改变不会反映在方法之外。 
  hello(CustomObject)被赋予一个对象的引用的副本,然后你可以使用它来改变实际的对象。  把它看作是改变对象的内容。  所以你的改变反映在调用者中。 
给定一个对象的引用,你可以使用它暴露的方法/域来改变对象
因为对于字符串,您只是更改本地参数引用。
链接地址: http://www.djcxy.com/p/86695.html