在java中判断两个对象是否相等,应该用equals函数而不是==或!=两个运算符,但是我用下面的代码测试时输出的是==而不是!=,请问这是为什么啊String a = "004606b82f7609592a76c2108e56e0fb-3.1";
String bc = "004606b82f7609592a76c2108e56e0fb-3.1";
if (a == bc)
    System.out.print("==");
else
    System.out.print("!=");

解决方案 »

  1.   

    因为String内容都是放在静态常量区的。
    你可以这么理解,当bc="004606b82f7609592a76c2108e56e0fb-3.1";
    他会先去常量区查找有没004606b82f7609592a76c2108e56e0fb-3,如果有那么把bc执行他的内存地址
    所以a == bc
    String a = new String("004606b82f7609592a76c2108e56e0fb-3.1");
    String bc =new String( "004606b82f7609592a76c2108e56e0fb-3.1");
    这样就不等了~
      

  2.   

    当你给变量赋值时,你就在堆内存中赋值了。实际上你定义的是两个String 变量;那么 a bc 都是指向的 都是那个数字。
    如果你定义两个String 对象:
    String a=new String("004606b82f7609592a76c2108e56e0fb-3.1");
    String bc=new String("004606b82f7609592a76c2108e56e0fb-3.1");那么你就可以得到你想要的了就是  !=。
    看书一定要仔细,不然概念易混淆哦
      

  3.   

    推荐楼主看看这个:
    http://blog.csdn.net/tayanxunhua/article/details/8718453
      

  4.   

    String 在内存里是静态存储的,当在程序里初始类一个对象之后,便在内存里产生了一个String实例,再次初始化一个对象之后,如果内存里有相同的字符串的话,该字符串变量便会指向该对象 ,所以他们是相等的,equals()比较的是地址。