tes1是句柄,当然!="testString",也就不等于test啦。

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/380/380952.shtm
      

  2.   

    关键在这两个:
     为什么test == testString 而test1 != testString?    if (test == "testString") {
            System.out.println("test == testString");
        } else {
            System.out.println("test != testString");
        }    if (test1 == "testString") {
            System.out.println("test1 == testString");
        } else {
            System.out.println("test1 != testString");
        }
      

  3.   

    http://www.csdn.net/expert/topic/380/380952.shtm
      

  4.   

    String 类的比较不能用“==”而必须用equals方法,把你上面的test == "testString" 改成test.equals("testString")试试。
      

  5.   

    但是为什么 test == "testString" 且 test .equals( "testString") 都为真?
      

  6.   

    当你在java程序中创建一个字符串常量时,虚拟机会生成一个字符串池来存放这些字符串对象,在上面的程序中,由于显式的对test字符串对象赋值(test="testString"),所以test对象的指针就是"testString"的指针,因此它们是相等的。而你判断test1和“testString”的结果不相等是因为test1的内容是arc[2]得来的,但是test1对象在内存处于一个新的位置,所以用"=="来判断肯定是返回false的。如果你把这条语句换成test1.equals("testString"),那结果就是true了。
    请记住一点,在java中,“==”是判断对象在内存中的位置是否相等,而equals方法则是判断两个对象的属性/内容是否相等。
      

  7.   

    谢谢garlic11!
    实际上equals方法默认为比较句柄值,
    只有该对象重新写了equals方法,才是判断两个对象的属性/内容是否相等。 大多数类都重新写了equals方法.
    如果写了一个类Test,但是没有重新写equals方法,则是比较句柄值.参考Thinking In Java
      

  8.   

    原来如彼:)
    看来loope兄比我研究的更深一层了,惭愧惭愧 ^_^
      

  9.   


    大开眼届阿/*--by bookbobby(书呆)-+
     |            |
     |  你说爱我只是习惯  |
     |  再也不是喜欢    |
     |  我给你的爱     |
     |  已不再温暖     |
     |            |
     +--by bookbobby(书呆)-*/
      

  10.   

    garlic11回复于2001-12-17 14:13:14 的回答很中肯,谢谢!
    这正是我原来迷惑的地方.
    我想现在大家对"=="和"equals()"都比较明白了,呵呵.