《java核心技术》中讲到:一个要认识到,一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。old = new Class; new = old;让new、old两个变量引用同一个对象。public class test
{
public static void main( String[] args )
{
String oldStr = new String();
oldStr = "oldStr";
String newStr = oldStr;
newStr = "newStr";
System.out.println( oldStr );
System.out.println( newStr );
        }
}运行结果是
OldStr
newStr
newStr、OldStr并没有指向同一个对象,请问大家是什么原因。

解决方案 »

  1.   

    newStr = "newStr";
    又指向一个新的对象"newStr"了。
      

  2.   

    String比较特别,LZ可以用StringBuffer试试:     StringBuffer oldStr = new StringBuffer("1");
        StringBuffer newStr = oldStr;
        
        oldStr.append("2");
        System.out.println(oldStr==newStr);
        System.out.println(oldStr);
        System.out.println(newStr);
      

  3.   


    用不专业的只是给你解答其实 其实你的old 和 new  都是两个 引用,什么是应用呢 就好比 你拿的遥控器,遥控器能控制相应的电视。String oldStr = new String();// 你给了一个 没有名字的string 电视 遥控器给了old  
            oldStr = "oldStr"; //这里你把一个名字为oldStr的遥控器 给了 old 这时候 old表示的是新的遥控器了 而非开始的new String的那个了 
            String newStr = oldStr;这个时候 new 和old 拿着同一个遥控器 可以控制同一个电视
            newStr = "newStr";//这个时候你又给了new 一个 名字为newStr的遥控器 明显最后的结果是 old 拿着 oldStr的遥控器   new 拿着 newStr的遥控他们控制不同的电视  这个电视是内存
      

  4.   

    请问 oh_Maxy:
        我试了StringBuffer,结果oldstr和newstr相等,运行结果是:
         true
         12
         12    
    除了String,Java中还有什么类型是特殊的?
      

  5.   

    String是常量对象..,和一般的对象不同。
    String s1 = "abc";
    String s2 = "abc";
    这样,s1,s2都会指向同一个地址。
    因为"abc" 会在常量池中占据一个内存空间,所有的 ="abc" 都会指向该空间。
    但如果你使用
    String s = new String("abc");就不会指向常量池"abc”;String s1 = new String("abc");
    String s2 = s1; if (s1 == s2)
    System.out.println("s1 == s2");
    else
    System.out.println("s1 != s2");这样 s1 = s2了。
    因为是按照对象的构造方法来的,而不是通过指向一个常量进行赋值的。
    String s = "abc";

    String s = new String("abc)";
    具有不同的效果。
      

  6.   

    String str1 = "java";//常量池中创建
    String str2 = new String("java");//堆中创建
    String str3= "java";//量池中已经创建了,不在创建,直接指向str1 除了String,Java中还有什么类型是特殊的? 没有了
      

  7.   

    楼上说道点子上了,
    String oldStr = new String();
            oldStr = "oldStr";
    注意这里其实创建了两个实力。
      

  8.   

    听别人说java有按值传递和按引用传递的。
      

  9.   

    据说java都是按值传递的,只不过这个值可以是基本类型的数值,也可以是地址!