日期:2014-05-20  浏览次数:20817 次

java 判断字符串相等
在java中判断两个对象是否相等,应该用equals函数而不是==或!=两个运算符,但是我用下面的代码测试时输出的是==而不是!=,请问这是为什么啊

String a = "004606b82f7609592a76c2108e56e0fb-3.1";
String bc = "004606b82f7609592a76c2108e56e0fb-3.1";
if (a == bc)
    System.out.print("==");
else
    System.out.print("!=");


------解决方案--------------------
因为String内容都是放在静态常量区的。
你可以这么理解,当bc="004606b82f7609592a76c2108e56e0fb-3.1";
他会先去常量区查找有没004606b82f7609592a76c2108e56e0fb-3,如果有那么把bc执行他的内存地址
所以a == bc
String a = new String("004606b82f7609592a76c2108e56e0fb-3.1");
String bc =new String( "004606b82f7609592a76c2108e56e0fb-3.1");
这样就不等了~
------解决方案--------------------
当你给变量赋值时,你就在堆内存中赋值了。实际上你定义的是两个String 变量;那么 a bc 都是指向的 都是那个数字。
如果你定义两个String 对象:

String a=new String("004606b82f7609592a76c2108e56e0fb-3.1");
String bc=new String("004606b82f7609592a76c2108e56e0fb-3.1");

那么你就可以得到你想要的了就是  !=。
看书一定要仔细,不然概念易混淆哦。。。
------解决方案--------------------
推荐楼主看看这个:
http://blog.csdn.net/tayanxunhua/article/details/8718453
------解决方案--------------------
String 在内存里是静态存储的,当在程序里初始类一个对象之后,便在内存里产生了一个String实例,再次初始化一个对象之后,如果内存里有相同的字符串的话,该字符串变量便会指向该对象 ,所以他们是相等的,equals()比较的是地址。。。。