String a = "ABC"; 
String b="AB"; 
String c=b+"C"; 
System.out.println(a==c); //为什么是false呢?在C++,VB,DELPHI,C#,应该都是true;

解决方案 »

  1.   

    其他那些乱七八糟的我不知道!!JAVA里就是false   “==”比较的是内存地址,equals()比较的才是值
      

  2.   

    ==比较内存地址
    如果改成
    String c="AB"+"C";  
    System.out.println(a==c);
    则结果是true,因为字符串常量池的原因。"AB"+"C"属于字符串常量连接,会调用String.intern方法使用字符串常量池
      

  3.   

    ==比较的地址a.equals(c) 才是比较的字符串
      

  4.   

    在java object类中"=="、和equeals()都是比的内存地址,但是String类中不是,原因是String类重写了equals()和hashCode(); 在String类中"=="比的还是内存地址,但String比的则是指。
      

  5.   

    因为JAVA里面string 不是原始数据类型,而是对象,其他语言应该是原始数据类型
      

  6.   

    String c = "A"+"BC";这样就会是true了    了解 ?
      

  7.   

    String c=b+"C";  中b为变量,所以c也是变量,所以为falseString c=“a”+"C";的话c肯定为常量就相等了 
      

  8.   


    这个是正解,建议仔细看看。在JAVA中字符串常量池是个很有特色的思想。
      

  9.   

    String这个类已经重写了equals这个方法了
      

  10.   

    C#里确实是 true
    C# 中 string 类的 == 运算符重载了
      

  11.   

    用==比较string类型,比较的是内存地址。要比较内容相等要用equals
      

  12.   


    在C#中,不但楼主的代码是 true,而且
    string str1 = new String("a");
    string str2 = new String("a");
    str1 == str2 也会得到 true因为在C#中,已经对字符串的相等运算符进行了重载
      

  13.   


    有通用编程语言的string是原始数据类型吗?
      

  14.   

    你可以研究下JAVA中堆内存和栈内存的区别
      

  15.   

    String c=b+"C";  运行这句的时候产生了一个新对象。 
    如果把你的代码改为
    String a = "ABC"; 
    String b = "AB"; 
    String c= "AB" + "C"; 
    System.out.println(a==c);
    结果是true 因为c ="AB" +"C"时,并没有产生新对象。这个问题没必要钻牛角尖。记得java比较字符串用equals就行了。java的==号比较的是内存地址。 即,看2个对象是不是同一个对象。