tuxiaodi13
2015-08-13 05:24
采纳率: 50%
浏览 1.5k
已采纳

一道面试题,求大神帮助

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • blownewbee 2015-08-13 05:27
    已采纳

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

    点赞 评论
  • Q544471255 2015-08-13 05:29

    这样就是输出你要的值了,.输出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;
        }
    
    
    }
    
    点赞 评论
  • blownewbee 2015-08-13 05:31
     很多初学者被误导,值类型传值,引用类型传引用,其实这是不对的,看如下代码
    void foo1(A a)
    {
        a = new A();
            a.x = 123;//不会改变原来的对象的x
    }
    void foo2(A a)
    {
        a.x=123; //会改变原来的对象x
    }
    
    
    class A
    {
        public int x;
    }
    
    点赞 评论
  • 纵横车 2015-08-13 05:49

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

    点赞 评论

相关推荐 更多相似问题