String a="hello,";
String b=a;
b="java.";
System.out.println(a);
System.out.println(b);
如上的代码,按照某些书上的解释,是一个引用,按理说a也应该=java才是,可是我的输出结果是hello,并没有改变。是我理解错了,还是其它原因?

解决方案 »

  1.   

    a为hello        
    b为java。
    按照某些书上的解释,是一个引用,按理说a也应该=java才是,在这里错了
    a是个引用,指向hello
    b指向a
    b再指向“java"
    a始终还是hello嘛
      

  2.   

    String b=a;// b引用的是a引用所指定的地址。b="java"; //覆盖掉前面的引用LZ好像理解上有偏差
      

  3.   


    String a="hello,";
    String b=a;  //将b指向了a所指向内存
    b="java.";   //将b指向了"java"所在内存
    System.out.println(a);
    System.out.println(b);
    从上面可以看出, 两次赋值都是改变了b的引用, 因此, a和b不是同一个东西.
      

  4.   


    我晕了。。
    楼主错误理解了这步
    String b=a;
      

  5.   


    我换一下代码,是不是可以这样解释:String a="hello,";
    String b=a;//b指向hello的内存
    a="java.";//(这里的代码做了修改)a不再指向hello的内存,而指向了java的内存
    System.out.println(a);
    System.out.println(b);//所以输出时b还是指向原来的内存hello,而不是java...如此解释倒是理解了,可是所谓的引用:指向同一个对象,对任何一个变量的修改都会影响另一个变量的值。似乎就没有体现了,这样跟int型的赋值没啥区别嘛
      

  6.   


    可惜你没有修改那个变量, 而是把它指向其他地方了, 真正的修改是修改它的内部, 假设String提供一个方法setValue(), 这个方法真正修改了内部的值, 那么你调用它才是修改值.
      

  7.   

    似乎是噻我把“hello”当成a自己的东东了,然后b指向ab变了,a也要跟着变
    实际上“hello”这个字符串是个独立的东东,a和b都是指向这个对象的这样理解就正解了吧
      

  8.   


    know了,know了,非常感谢~~~~
      

  9.   

    b只是a的引用而已。无论你如何改变b的值都不会影响a的!建议楼主去看看java的内存分配,主要是栈内存