昨天在一个贴里看到如下一个题目String a="java";
String b="java";
String c=new String("java");
d="ja";
e="va";
f="ja"+"va";
g=d+e;
h=c;我想问下为什么a==g返回值为false;g的值也应该是java,==是指向内存地址空间。我想也应该指向同一地址才对啊。

解决方案 »

  1.   

    String比较特殊.你应该用equals才行!
      

  2.   

    值和地址是两马事a.equales(g)才是TRUE
      

  3.   

    若想对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。
      

  4.   

    boolean,char,byte,short,int,long,float,double,可以用“==”判断
      

  5.   

    人家就是想比较地址,非得让人家改成equals比较内容干嘛。
    a,d,e指向三个不同的地址,虽然d+e=java,但是这种拼接的字符串与a还是指向不同的地址。
    String a = "java";
     String b = "java";
     String c = a + "g";
     String d = b + "g";
                       System.out.println(a==b);//true
     System.out.println(c==d);//false.虽然c与d的内容相同
      

  6.   

    String a  = "java";
    String b = "java";
    String c = new String("java");
    String d = new String("java");
    我只有一句话要说:a和b指向同一个地址!c和d指向不同的地址!
      

  7.   

    String a = "java"; 像这样的值都在java的常量区,指向的是同一个地址。还后其他的基本类型也都是
    如此,如果你用new 就是在堆中申请了一个空间,虽然内容一样,但地址是不同的!
    用“+”最后也是 new 了一个新的返回给你,自然也不同了!
      

  8.   

    zzwh_0() 和hotfoxhot()的回复符合我这题的意思,每人10分。请别嫌少
      

  9.   

    昨天我也看到这个贴子了.也问了问.最后,我感觉是这样.
    String a  = "java";
    String b = "java";
    他们在常量池是一个对像.也就是在堆中他们是一个东西!但是他有两个不同的引用.也就是在栈中他们是两个东西!而我们在用==比较的时候是比较栈中的东西是不是相等!用equals是比较堆中东西是不是相等!不知道我理解的对不对!
      

  10.   

    == 比较引用,,equals比较对象内容
      

  11.   

    == 比较的是两个基本类型的值是否相等,两个引用类型的引用是否指向同一个地址
    equals 比较两个引用类型的内容是否相等