这两天和同学写GUI程序,之前一直都是String类型不能直接用==比较内容,要用equals(),我也试过,确实要用equals(),才能比较内容是否相等,可是发生一个怪事
eg:
Label pro=new Label("hi");
if(pro.getText()=="hi")
{
.................
}
这样他居然能够比较相等?不用equals也可以比较字符串内容相等?!!1奇怪~逻辑居然是对的,这是为啥,请大侠指点一二

解决方案 »

  1.   

    可以这样理解:对于string类的Equals方法它比较的是字符串对象的值(内容)是否相等,对于“==”当等号两边是对象的引用时它比较两个引用是否指向同一个对象;当等号两边是值时就比较这两个值是否相等,对
    pro.getText()方法,它返回的是一个字符串值,就可以这样比较,建议你去看看String类的equals(),方法的底层代码,它覆盖了Object类的Equals()方法,你在看看Object 类的equals(),方法,它的底层实现其实就是用“==”,所以在一些地方equals()方法与“==”能混用,或者说能用“==”的地方就能用equals(),但用equals()的地方不一定能用“==”
      

  2.   

    不是new出来的String,在 String literal pool中,所以可以使用 == 比较。
      

  3.   

    恩~刚才问了一些大牛,这个问题解决了,只要不是用new来申请的String,只要是“”的,他都会在字符串池分配,其实他还是比较的是地址,不过这个时候他们是同一块地址,谢谢楼上两位