//A.class
B b = new B();
String haha="pri";
ubc.change(haha);
System.out.println(haha);
//B.class
public void change(String haha){haha="haha";}
//
为什么在A中打出来的haha是pri而不是haha啊

解决方案 »

  1.   

    http://topic.csdn.net/u/20100331/22/5cdfbb13-3e7e-4e7c-9730-444d124b46ec.html?93821
      

  2.   

    http://topic.csdn.net/u/20100331/22/5cdfbb13-3e7e-4e7c-9730-444d124b46ec.html?93821
      

  3.   

    谢谢,可是string不是一个对象吗
      

  4.   

    String常量不可变的
    haha="haha";操作前后haha所指的对象不一样了
      

  5.   

    String字符串不能修改,删除或替换字符串中的某个字符,也就是说String对象的实体是不可以再发生变化的.
    可以考虑用StringBuffer
      

  6.   

    String 虽然不是基本数据类型,但是作为参数的时候 ,也是值传递. 
      

  7.   

    1.在栈内开辟一块内存名为haha1值为pri
    2.当change(haha)调用方发时
    3.在栈内又开辟了块内存名为haha2
    4.进入到change方法体中,haha2的值变为"haha“
    5.方法体结束时haha2内存地址就会自动消失
    所以最后haha最后的值还是pro
      

  8.   

    String haha = "pri"
    //在栈上分配一个变量haha,指向堆内存里德一个String对象pri
    ubc.change(haha)的时候,调用chang()方法,程序进入change()
    String haha,又分配了一个haha变量,并分配一个"haha"给haha,
    同样是haha,但是是不同的引用变量。chang()方法结束后,栈上的haha(按顺序来说是第二个)消失,分配的"haha"消失,你打印的时候,就剩下栈上第一次分配的haha,指向的是"pri"。String的确是定长字符串,String的引用不可变,我觉得楼主的问题是Java如何传值、传引用的问题。
    只是举例不当,如果换成int,就好说了。如果想改变某个成员变量的值,一般都会专门写个set()方法
    this.value = value;
    然后调用set方法改变变量的值。也是"菜鸟",说的不对请路过的大大们批评指正。
      

  9.   

    public class TestPassValue{

    static String name = "Hello";
    static int age ;

    public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    } public static void main(String [] args){

    TestPassValue test = new TestPassValue();
    test.setName("World");
    test.setAge(100);

    System.out.println(age);
    System.out.println(name);
    }
    }
    打印的结果是
    age=100;
    name=world
    (比较简陋,不要笑,不过我想,问题已经说清楚了,"Hello"改成了"world",这是你想要的change功效),具体怎么来的,画内存图。
      

  10.   

    因为值传递,作为参数传给change的”haha“是haha字符串变量的副本。
    因为字符串变量不可变,修改的结果是产生一个对应新值新的引用,在change方法中改变的是这个haha副本的引用,而原haha变量并没有发生变化。
      

  11.   

    java中只有值传递,String是不可变的,存在在字符串池中……
      

  12.   

    我觉得不对吧,通过画堆栈内存分配图:应该很容易的明白,string 可理解为对象引用,你重新赋值的时候,他会重新再栈内存中非配另一个内存空间的,所以通过你的方法,只是额外增添了一个空间,而并不能改变原来的string分配的空间吧!
    我是菜鸟我是这样理解的
      

  13.   

    http://hi.baidu.com/程序员目标/blog/item/21da28447c76fa056b63e5ed.html
    我总结了好多高手的理解,写到了我的百度空间,搞懂了我空间的问题相信这个问题不在话下