1、这个问题涉及到Java的字符串常量池,找到String.intern()方法的帮助看看,我记得上面有该问题链接,手头没有Java API,抱歉
2、是同一个对象
3、不一样,这个问题已经问过很多遍了,在本版搜索一下就可以 ^_^

解决方案 »

  1.   

    1 c == d:这个应该是编译器做的优化,因为你用的是"Heipark",在编译器分配给他空间后,下一次在有这个对象的时候编译器引用了同一个地址,所以为true.
    2 String a = new String("123"); 和String a = "123"
    这个区别是String a = new String("123"); 当你用这个语法的时候编译器所做的是:先有一个string的变量引用到“123”,然后在用这个引用new一个对象出来,然后在把这个对象的引用赋值给a。就好像是这样的代码: String temp = "123";
                                    String a = new String(temp);
    当然与string a = “123”不一样啦。
      

  2.   

    wangcx(我侵蚀着孤独)
    说的有道理
      

  3.   

    String a = new String("123"); 和String a = "123";不一样。前面new了一个,说明给“123”开辟了自己的一段新的内存空间。这些在张孝祥的教程里讲的很清楚。在www.manfen.net里有视频教学,可以用bt下载。
      

  4.   

    小弟愚笨,恕小弟多问几句
    1.
    String a = new String("Heipark");
    这句话的意思是声明了一个指向字符串对象"Heipark"的引用s, s的意义类似其他语言的指针。
    a是引用, 字符串"Heipark"是对象
    我说的对吗??
    2.
    有个Person类
    Person mary = new Person();
    这句话的建立的mary是对象吗?这句话的解释方法和上面的一样吗??
      

  5.   

    blackpark(暖咖啡) ,
    1 - Heipark因为new操作分配了一段新的内存空间,而a“指向”了这段空间
    2 - 这里的mary是一个引用,而不是对象,这里真正的对象是new Person()所分配的空间
      

  6.   

    关于问题的解答:
    1、关于==测试相等,它只能判别两个串是否存储在同一个位置。
       String a = new String("Heipark");
       String b = new String("Heipark");
    由于String a , b 都是由String生成了一个新的对象,那么虽然对象的值相等,
    但是不再同一个内存区域,所以
    System.out.println("a == b ->" + (a == b));
    的结果是a == b ->false2、关于.equals测试相等,这个书上提到是可以用来测试两个串的正确用法。
    System.out.println("a.equals(b) ->" + a.equals(b));
    所以a.equals(b) ->true3、关于String a = "b";和String a = new String("b");的问题
    Because String objects are immutable they can be shared. For example: 
     String str = "abc";
     is equivalent to: 
     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
    大意就是字符串是可以共享的,就是当你
    String c = "Heipark";
    String d = "Heipark";
    其实只有一个对象(可能是匿名的),c,d共同指向那个对象。

    String a = new String("Heipark");
    String b = new String("Heipark");
    是先创建对象在赋值,所以虽然值相同但是不是同一个对象。
    我想这样解释的话,后面的答案就显而易见了。
    >-----------------------------<参考资料:
    Java核心技术卷一:String部分48-49页
    Java API (Sun WebSite) java.lang.String
      

  7.   

    关于"=="和"equals"我是这样看的!!!
         a==b 就像是一对双胞胎,虽然它们表面上看上去很像,但是毕竟是兄弟,而不是一个人.!
       而c==d 就好比是c为d取的一个别名,c和d代表的是同一个人,所以它们就相等喽!~~~
      

  8.   

    参考资料:
       张孝祥:java就业培训教程!!!
            面向对象上,82页```