刚才在百度贴吧和某人争了半天。
======================================
我们在入门的时候,都学过
第一种    String a = new String("abc");
第二种    String a = "abc";
当用第一种方式时,==会给出false。
所以我们比较字符串的时候,要用equals.
=======================================
然而,我们又知道,java里有个String池的东西。
所以,当用第二种方式时,==也会给出true
所以在百度贴吧里,某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
========================================
我突然就觉得,和人在争比较字符串该用==还是equals,是不是我疯了

解决方案 »

  1.   

    不是。你理解字符串是怎么存储的,你就明白==比较结果为什么相等。理解下jvm把
      

  2.   

    我始终觉得,比较字符串的值时,就该毫不犹豫用equals
    软件测试里有句话,软件测试不是为了证明程序无错,而是为了证明软件有错。
    同样,我觉得,不应该拿String池来说明==可用,而应该用new String()来说明不可用。
    某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
    万一就有那么个非一般人呢?我觉得某人就不是一般人
      

  3.   

    老夫还是老老实实看深入JVM去了,
      

  4.   

    new 出来的 String 和 直接赋值的 区别大了。
      

  5.   

    某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
    ================================================================好吧,我就是想你告诉我,你在比较字符串的值时,你是习惯用==还是习惯用equals
    ================================================================
      

  6.   

    如果用==就可以了
    sun的程序员是**吗?
    干嘛花心思重写equals?
      

  7.   

    ==和equals貌似又出新花样了..好吧,我不知道一般人是不是用第一种赋值方式,反正我从来不用。
      

  8.   

    个人理解为
    ==是比较两个字符串所指的对象也就是对象的引用是否是同一个。
    equals是单纯的比较连个字符串的对象的值是否相等。
    个人认为视情况而定,在需要做什么比较时候,就用什么符号。
      

  9.   

    public class Tt { public static void main(String[] args) {
    String a = "a";
    String b = "b";
    String ab = "ab";
    String s = a+b;
    if(s==ab){
    System.out.println("true");
    }else{
    System.out.println("false");
    }
    }}
    结果false
    ======================
    确实没必要再讨论了。
    刚才在贴吧有人说了
    ================================================
    关于equalsw我在java核心技术上抄下来。是这样写的
    对于s.equals(t)如果字符串s与字符串t相等,则返回true否则就返回 false 。需要注意的是,s与t可以是字符串变量,也可以是字符串常量。例如:
    char greeting = "hello";
    "hello".equals(greeting);
    以上的表达式是合法的
    要想检测两个字符串是否相等,而不区分大小写,可以用equalsIgnoreCase()方法
    "Hello".equalsIgnoreCase("hello");
    一定不能使用 == 运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上,当然,如果字符串放置在同一个位置上,它们必然相等,但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上,
    如果虚拟机始终将共同的字符串共享,就可一个使用 == 运算符接侧是否想相等,但实际上只有字符串常量是共享的,而 + 或 substring等操作残生的结果不是共享的,因此,千万不要使用 == 运算符测试两个字符串是否相等。
    在java核心技术中文第八版45页看到的。希望对你有所帮助
    ============================================