String a = "tom" ;
String b= "" ;
b =a ;
b = "Jim" ;
System.out.println( "a的值为:" + a );
为什么改变a的内容没有变呢,java对象的赋值不是按址传递的吗?

解决方案 »

  1.   

    final模式懂吗? String 就是 final 的, 意思就是不可改变,不能继承.
    通俗的讲,你每操作一次都是一个新的对象
      

  2.   

    答:见每句后的注解说明
    String a = "tom" ; //此时a指向串对象“tom”
    String b= "" ;   //此时b指向串对象“”(空)
    b =a ;   //将a的值(注意:是引用)给b.此时a与b都指向同一个串对象“tom”
    b = "Jim" ;   //此时b又指向串对象“Jim”,而a仍指向串对象“tom”
      

  3.   

     你这里是String对象。 b = “jim”是新创建了一个值为“jim”String的对象,a的引用没有变,所以a 和b引用的对象是不同。 
    java 对象的赋值按址传递其实是错误的。 真正意义上是按值传递的。
    建议你看一下 : java核心技术第七版第一卷 115-117页 上面有很详细的解答 
      

  4.   

    就如3楼所说的,没改变a的内容
    只是改变了b的内容,而String对象是immutable(不变的)所以改变b的内容不会影响到a
    就算a的内容是mutable(可变的)给b重新赋值也无法改变a,
    因为java中传递对象是object value(只可改变对象内部状态,重新指向新的对象无效)
      

  5.   

    对了,想起来了,String类是final型的,一旦定义便不可改变,多谢朋友们提醒!