应改成If (tUserName.getText().equals("Rain"){...}
因为字符串都是对象,==比较的是地址,而不是值.

解决方案 »

  1.   

    if (tUserName.getText().equals("Rain"){
    ...
    }== 是判断地址是否相同
      

  2.   

    ==是判断hashcode,只有自己和自己才==为真
    String.equals(String str)才是比较具体的"字符串"内容
      

  3.   

    但是为什么我这样的判断却可以呢?
    If (tUserName.getText().length()==4){
    ......
    }
      

  4.   

    String 是一个对象,当你使用String s = "string";声明的时候,s是一个对象引用,指向"string",它放在内存的stack中,只占用一个字节的空间;而"string"则放在内存的heap中,它才是一个真正的对象。在你的表达式中,tUserName.getText()得到的是"Rain"的引用,你用一个字节大小的引用信息与"Rain"整个字符串比较能相等吗?表达式tUserName.getText().length()是通过"Rain"的引用得到"Rain"字符串的长度,是一个int型,你用它和4比较当然相等了。
      

  5.   

    length()得到的是整型值,当然可以用==啦
    字符串值比较一定要用equals,切记切记!
      

  6.   

    length()是int型,不是对象。