比对字符串一定要用equals("");
例如String s = "dd";
           if(s.equals("dd")){
               System.out.println("true");
           }
==是用来比对对象在内存中的地址,所以不能用来比对字符串

解决方案 »

  1.   

    这个我知道。==比较的实际上是内存地址
    以前好像看到资料String在JVM中有一个什么缓存机制,如果是String str = "ok";这样的创建方式,不是用new创建的,首先会查找是否有,如果有就会直接取一个。这样的话,下面两个好像不太好解释啊。
    System.out.println(Other.java == java);
    System.out.println(java==("Ja"+va));
      

  2.   

    1、Java语言规范规定,同一个程序中任何相同的字符串常量(literal string)都只是同一个String对象的不同引用,不论它们是否在同一个类、同一个包中。2、Java语言规范规定,由常量表达式计算得到的String对象将在编译期被求值,并在运行时被作为字符串常量对待;在运行时计算得到的String对象将是一个完全独立的新对象。所以,Other.java、main里的java变量、"Java"字符串,这三个实际上是同一个对象,这就是前面两个true的原因。String是immutable对象,字符串连接操作(+)将生成一个新的对象,所以最后一个比较得到false。这里还有一个小把戏:你可以用String.class.getDeclaredField("value");语句取到一个Field对象,再调用这个Field对象的set方法,修改Other.java的值,再看看main里的java变量有什么变化?