一道面试题,求大神帮助

public class ceshi{
String str=new String("good");
public static void main(String[] args){
ceshi cs=new ceshi();
cs.change(cs.str);
System.out.print(cs.str);
}
public void change(String str){
str="test ok";
}
}

正确答案是输出good,请问为什么不是test ok

因为Java是传值而不是传引用。你str="test ok";将str指向另一个字符串常量,不会影响实参。

这样就是输出你要的值了,.输出test ok .

 public class Main {
    String str=new String("good");
    public static void main(String[] args){
        Main cs=new Main();
        cs.str=cs.change(cs.str);
        System.out.print(cs.str);
    }
    public String change(String str){
        str="test ok";
        return str;
    }


}
 很多初学者被误导,值类型传值,引用类型传引用,其实这是不对的,看如下代码
void foo1(A a)
{
    a = new A();
        a.x = 123;//不会改变原来的对象的x
}
void foo2(A a)
{
    a.x=123; //会改变原来的对象x
}


class A
{
    public int x;
}

change()方法改变的只是局部变量。